lodash多维采摘

时间:2015-08-23 19:19:53

标签: javascript lodash

使用lodash库,我希望能够将多个值插入到多维数组中,如下所示:

var arr = [{ a: 2, b: 3, c: 4 }, { a: 1, b: 4, c: 2 }];

_.pluck(arr, ['a', 'c']) --> [[2, 4], [1, 2]]

这可能吗?

感谢。

2 个答案:

答案 0 :(得分:4)

多个键没有弹出,但你可以这样做:

<击>

<击>
_.map(['a', 'c'], function(path) {
  return _.pluck(arr, path);
});

这将返回按键分组的值。

<击>

编辑:

_.mpluck = function(collection, paths) {
  return _.zip(
    _.map(paths, function(path) {
      return _.pluck(collection, path);
    })
  );
}

var arr = [{ a: 2, b: 3, c: 4 }, { a: 1, b: 4, c: 2 }];

_.mpluck(arr, ['a', 'c']) --> [[2, 4], [1, 2]]

这将用指定键的数组替换每个对象。

没有lodash:

function mpluck(collection, paths) {
  return collection.map(function(obj) {
    return paths.map(function(path) {
      return obj[path];
    });
  });
}

答案 1 :(得分:1)

没有lodash的解决方案:

function pluck(arr, k) {
    return arr.reduce(function (r, a) {
        r.push(k.reduce(function (rr, aa) {
            rr.push(a[aa]);
            return rr;
        }, []));
        return r;
    }, []);
}

var arr = [{ a: 2, b: 3, c: 4 }, { a: 1, b: 4, c: 2 }],
    x = pluck(arr, ['a', 'c']);

document.write('<pre>' + JSON.stringify(x, 0, 4) + '</pre>');