在 Lodash.js/Underscore.js 中,如何为每个元素添加索引?

3

以下是输入内容:

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

输出将会是:
[{animal: "cat", idx: 1}, {animal: "dog", idx: 2}]

有人有在Lodash/Underscore.js中如何实现这个的想法吗?


1
_.map(input, function(x, i) { return _.extend({idx:i}, x); })? - Bergi
4个回答

3

在Underscore中:

您可以使用.map.each来迭代目标数组中的每个元素,以添加索引。然后,您可以使用_.extend来添加“idx”属性。

工作示例:

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

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

@torazaburo 您是正确的,因为OP想要从1开始索引。我已经更新了我的答案。 - Pavan Ravipati
在使用 map() 时,最好不要改变集合中的每个项目。我会将其更改为 return _.extend({ idx: i + 1 }, e) - Adam Boduch

0
var data = [{animal: "cat"}, {animal:"dog"}, {animal:"er"}];
var data2 = _.select(data,function(val, key){    
    return {val, idx : key};
});

我完全不明白。我猜selectfilter的旧称,但你的过滤函数总是返回一个真值,所以所有的项目都会被选中,最终得到的结果与开始时相同。 - user663031

0

循环遍历元素,将索引添加到每个元素中。

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

0
var newAnimals = _.map(animals, function(animal, index){
    animal.idx = index + 1;
    return animal;
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接