ES6第一顺序函数:查找包含值的子数组的第一个对象的数组索引

时间:2018-04-02 07:03:01

标签: ecmascript-6

我想为我能做的事情(也许更详细)制作一个很酷的高阶函数链:

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"))

2 个答案:

答案 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会立即返回truefindIndex会返回当前索引。

&#13;
&#13;
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;
&#13;
&#13;