【问题标题】:In Lodash.js/Underscore.js, how to add index for every element?在 Lodash.js/Underscore.js 中,如何为每个元素添加索引?
【发布时间】:2015-06-19 08:24:06
【问题描述】:

这是输入:

[{animal: "cat"}, {animal:"dog}}

输出将是:

[{animal: "cat", idx: 1}, {animal: "dog", idx: 2}]

有没有人知道如何在 Lodash/Underscore.js 中做到这一点?

【问题讨论】:

  • _.map(input, function(x, i) { return _.extend({idx:i}, x); })?

标签: javascript underscore.js lodash


【解决方案1】:

下划线:

您可以使用 .map.each 来遍历您要添加索引的目标数组中的每个元素。然后你可以使用 _.extend 来添加 "idx" 属性。

工作示例:

var data =  [{animal: "cat"}, {animal:"dog"}]

_.map(data, function(e, i) {
  return _.extend(e, {idx: i + 1});
});

【讨论】:

  • @torazaburo 你是对的,因为 OP 希望从 1 开始他的索引。更新了我的答案。
  • 当使用map() 时,最好不要改变集合中的每个项目。我会把它改成return _.extend({ idx: i + 1 }, e)
【解决方案2】:
var data = [{animal: "cat"}, {animal:"dog"}, {animal:"er"}];
var data2 = _.select(data,function(val, key){    
    return {val, idx : key};
});

【讨论】:

  • 我根本没有得到这个。我猜selectfilter 的旧名称,但是您的过滤器函数总是返回一个真实值,因此所有项目都会被选中,您最终会得到您开始时的内容。
【解决方案3】:

遍历元素,为每个元素添加索引。

_.each(data, function(elt, i) { elt.idx = i + 1; })

【讨论】:

    【解决方案4】:
    var newAnimals = _.map(animals, function(animal, index){
        animal.idx = index + 1;
        return animal;
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      相关资源
      最近更新 更多