我想为我能做的事情(也许更详细)制作一个很酷的高阶函数链:
for (var idx = 0; idx < collecionA.length; idx++) {
for (item in collectionA[idx].children) {
if (item.sku == "someVal") return idx
}
}
有没有人看到用map / find / filter / reduce等做一个时髦的方法?我一直想要使用forEach但是当我意识到我无法从中返回时,我会得到pwnd。
类似的东西:
return collectionA.children.findIndex( (child) => child.children.oneOfThemIncludesAnObjectWithThisProperty("someVal"))
答案 0 :(得分:1)
这可能就是你要找的东西:
function func() {
var index = -1;
collectionA.forEach((p, i) => p.children.forEach(item => {
if (item.sku == "someVal") index = i;
}));
return index;
}
var collectionA = [{
children: [{
sku: "someOtherVal"
}]
}, {
children: [{
sku: "someVal"
}]
}, {
children: [{
sku: "someOtherVal"
}]
}]
console.log(func());
答案 1 :(得分:1)
在外部集合上使用Array.findIndex()
。对于每个项目,使用Array.some()
迭代子项,并检查属性(sku
)的值是否与请求的值匹配。只要找到匹配值,some
会立即返回true
,findIndex
会返回当前索引。
const collection = [{"children":[{"sku":"someOtherVal"}]},{"children":[{"sku":"someVal"}]},{"children":[{"sku":"someOtherVal"}]}];
const findIndexWithChildProp = (arr, prop, val) =>
arr.findIndex(({ children }) =>
children.some(({ [prop]: v }) => v === val));
const result = findIndexWithChildProp(collection, 'sku', 'someVal');
console.log(result);
&#13;