我正在尝试使用数组映射来进一步过滤对象,以准备将其发送到服务器以进行保存.我可以过滤到1个键值,这很好,但是我想进一步检查它们并根据布尔值检查它们.
所以,现在这就是我所拥有的 -
$scope.appIds = $scope.applicationsHere.map( function(obj){
if(obj.selected == true){
return obj.id;
}
});
Run Code Online (Sandbox Code Playgroud)
这对于拉出id非常有用,但是如果他们选择的值== false,我不想在这个新数组中推送它们,所以我放了一个条件来进一步过滤.这有点工作,我得到一个id的数组,但是具有.selected == false的id仍然在数组中,只是值为null.所以,如果我在对象中有4个项目,其中2个是假的,它看起来像这样 -
appIds = {id1, id2, null, null};
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 有没有办法在没有空值的情况下执行此操作.谢谢阅读!
根据此 SO thread,flatMap或者reduce当需要映射和过滤一组对象时推荐,特别是如果他们想避免多次循环遍历集合。就我个人而言,我更喜欢使用它flatMap,因为我认为它更容易阅读,但这当然完全是主观的。除了 的浏览器兼容性问题之外flatMap,是否普遍推荐一种方法或比另一种方法更有利(可能是因为但不限于性能或可读性的原因)?
更新:这是来自 flatMap 过滤的参考答案的示例:
var options = [{
name: 'One',
assigned: true
},
{
name: 'Two',
assigned: false
},
{
name: 'Three',
assigned: true
},
];
var assignees = options.flatMap((o) => (o.assigned ? [o.name] : []));
console.log(assignees);
document.getElementById("output").innerHTML = JSON.stringify(assignees);Run Code Online (Sandbox Code Playgroud)
<h1>Only assigned options</h1>
<pre id="output"> </pre>Run Code Online (Sandbox Code Playgroud)
我有一个对象数组
,我想从中有条件地创建另一个对象数组。
例如。——
var devs = [
{
name: 'A',
age: 26,
tech: ['JavaScript','React'],
addr:{
country:'India',
city:'Pune'
}
},
{
name: 'B',
age: 25,
tech: ['Node','AngularJs'],
addr:{
country:'USA',
city:'NY'
}
},
{
name: 'C',
age: 27,
tech: ['React','AWS'],
addr:{
country:'UK',
city:'London'
}
}
]
Run Code Online (Sandbox Code Playgroud)
我想要一个在他们的“技术”字段数组中有“反应”的对象数组,
并且只想显示他们的名称和技术,
以下是预期的输出 -
[
{
name: 'A',
tech: ['JavaScript','React']
},
{
name: 'C',
tech: ['Java','React'],
}
]
Run Code Online (Sandbox Code Playgroud)
我知道可以使用条件过滤方法,
但是如何从对象数组中删除不必要的字段?
这里可以使用map方法吗?如果是这样,我该如何实施?
以下是我的半熟代码 -
var filteredDevs = devs.filter(temp => temp.tech.includes('React'));
Run Code Online (Sandbox Code Playgroud) 我正在我的应用程序中实现搜索功能。UI 中的搜索结果是基于对象数组返回的。本质上,我想要做的是迭代每个对象中的名称、custNumber 和潜行值,并且只返回包含包含字符串(从用户搜索栏生成)的值的对象。这个想法是用户可以搜索对象中的任何内容并产生正确的结果
这是我的阵列
var result = [{
name: 'Donna Shomaker',
custNumber: '6658924351',
sneak: 'string1 string1 string1',
foo: false,
bar: false,
},
{
name: 'Ron Duluth',
custNumber: '8812654434',
sneak: 'string2 string2 string2',
foo: false,
bar: false,
},
{
name: 'Jimmy Dawson',
custNumber: '8908198230',
sneak: 'string3 string3 string3',
foo: false,
bar: false,
}
]
Run Code Online (Sandbox Code Playgroud)
这是我走了多远
return result.filter(convo => {
return convo.name.toLowerCase().includes(searchbarVal.toLowerCase())
})
Run Code Online (Sandbox Code Playgroud)
这里明显的问题是这只返回基于名称值的对象。但是,我需要它将每个对象中的名称、custNumber 和潜行值与用户搜索进行比较。我已经尝试过 forEach、object.values 和 object.entries 方法,但无法让它们工作。非常感谢这里的任何帮助!!