我有一个如下所示的数组:
[{
name: 'foobar',
fields: [{
label: 'argle'
},{
label: 'bargle'
}]
},{
name: 'baz',
fields: [{
label: 'rar'
},{
label: 'hoogah'
}]
}]
我正在寻找具有field
匹配label === 'rar'
的对象的索引,因此我可以更新该特定字段。有没有最佳方法来实现这一目标?我知道indexOf
不会让我独自到达那里,但我正在努力解决这个问题。
答案 0 :(得分:5)
[
{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
答案 1 :(得分:2)
使用arrow functions,您可以执行Mathieu's answer很好,干净的
中显示的搜索FileHandleResolver resolver = new InternalFileHandleResolver();
manager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
manager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver));
FreetypeFontLoader.FreeTypeFontLoaderParameter params59 = new FreetypeFontLoader.FreeTypeFontLoaderParameter();
params59.fontFileName = font_dpb_59;
params59.fontParameters.size = 59;
manager.load(font_dpb_59, BitmapFont.class, params59);
然后
let arr = [
{name: 'foobar', fields: [{label: 'argle'}, {label: 'bargle'}]},
{name: 'baz', fields: [{label: 'rar'}, {label: 'hoogah'}]}
];
如果您对访问该项目本身更感兴趣,而不是它的索引,那么请改用arr.find
arr.findIndex(item => item.fields.some(deepItem => deepItem.label === 'rar')); // 1
此外,如果您想要匹配的每个项目,请使用arr.fileter
代替
arr.find(item => item.fields.some(deepItem => deepItem.label === 'rar')); // Object
答案 2 :(得分:0)
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
答案 3 :(得分:0)
这是一种“正常”的做法:
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'));