[英]Javascript: Iterate over an array of objects nested within an object as a value
[英]Javascript: Finding index of an object in an array, based on a value within a nested array on the objects
我有一个看起来像这样的数组:
[{
name: 'foobar',
fields: [{
label: 'argle'
},{
label: 'bargle'
}]
},{
name: 'baz',
fields: [{
label: 'rar'
},{
label: 'hoogah'
}]
}]
我正在寻找具有field
匹配label === 'rar'
的对象的索引 ,因此我可以更新该特定字段。 有没有最佳方法来实现这一目标? 我知道indexOf
不会让我自己,但我正在努力解决这个问题。
[
{name: 'foobar', fields: [{label: 'argle'}, {label: 'bargle'}]},
{name: 'baz', fields: [{label: 'rar'}, {label: 'hoogah'}]}
].findIndex(function(element, index, array) {
return element.fields.some(function(element, index, array) {
return element.label === 'rar';
});
})
返回1
使用箭头功能,您可以很好,干净地完成Mathieu答案中显示的搜索
let arr = [
{name: 'foobar', fields: [{label: 'argle'}, {label: 'bargle'}]},
{name: 'baz', fields: [{label: 'rar'}, {label: 'hoogah'}]}
];
然后
arr.findIndex(item => item.fields.some(deepItem => deepItem.label === 'rar')); // 1
如果你对访问项目本身更感兴趣,而不是它的索引,那么请使用arr.find
arr.find(item => item.fields.some(deepItem => deepItem.label === 'rar')); // Object
此外,如果您想要匹配的每个项目,请改用arr.fileter
arr.filter(item => item.fields.some(deepItem => deepItem.label === 'rar')); // [{...}, ...]
这是一种丑陋的做法。
var data = [
{name: 'foobar', fields: [{label: 'argle'}, {label: 'bargle'}]},
{name: 'baz', fields: [{label: 'rar'}, {label: 'hoogah'}]}
],
i = data.findIndex(e => ~e.fields.findIndex(f => f.label == 'rar'));
// returns 1
这是一种“正常”的做法:
var arr = [
{name: 'foobar', fields: [{label: 'argle'}, {label: 'bargle'}]},
{name: 'baz', fields: [{label: 'rar'}, {label: 'hoogah'}]},
{name: 'foo', fields: [{label: 'asjda'}, {label: 'hoogah'}]}
];
function findByLabel(arr, str) {
var res = null;
arr.forEach(function(item) {
if (item.fields[0].label == 'rar')
res = item
});
return res;
}
console.log(findByLabel(arr, 'rar'));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.