迭代Node.js中的项目数组

时间:2019-07-08 05:24:02

标签: javascript arrays node.js object ecmascript-6

我有一个index.js,我从中调用util.js如下:

util.js

module.exports.getResult = json => {
  return json.hits.hits.map(element => {
    const { _source } = element;

    return _source.details
      .filter(item => item.hasOwnProperty('deliveryDetails'))
      .map(item => {
        return item.deliveryDetails
          .filter(deliveryDetail => deliveryDetail.noOfItems > 0)
          .map(deliveryDetail => {
            return {
              id: item.Id,
              name: _source.name,
              noOfItems: deliveryDetail.noOfItems,
            };
          });
      });
  });
};

由于我多次返回,所以从最里面的.map转换为数组数组。这是迭代时所期望的还是我做错了?

然后将结果保存在一个最终数组中,我必须在index.js中执行以下操作:

const temp = helper.getResult(json);
const result = [].concat.apply([], [].concat.apply([], temp));

还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

是的-使用flat。要深入了解,您只需计算出length + 2

const result = temp.flat(temp.length + 2);

reduce使用递归函数。

const flattenDeep = arr => arr.reduce((a, c) => a.concat(Array.isArray(c) ? flattenDeep(c) : c), []);
const result = flattenDeep(temp);

答案 1 :(得分:0)

Array.prototype.flattenDeep = function() {
   return this.reduce((acc, val) => Array.isArray(val) ? acc.concat(val.flattenDeep()) : acc.concat(val), []);
}


const result =  temp.flattenDeep();