Javascript 向数组中的每个元素添加属性/索引

Javascript 向数组中的每个元素添加属性/索引,javascript,Javascript,我调用一个返回对象数组的Web服务: $.ajax({ dataType: "json", url: "WebServices/FetchMenu.aspx?P=0&L=2&mt=1", //data: data, success: function (data) { var foo = data; } }); 以下是回应: [ { color: "red", value: "#f00" },

我调用一个返回对象数组的Web服务:

$.ajax({
  dataType: "json",
  url: "WebServices/FetchMenu.aspx?P=0&L=2&mt=1",
  //data: data,
  success: function (data) {
    var foo = data;
  }
});
以下是回应:

[
    {
        color: "red",
        value: "#f00"
    },
    {
        color: "green",
        value: "#0f0"
    },
    {
        color: "blue",
        value: "#00f"
    },
    {
        color: "cyan",
        value: "#0ff"
    }
]
我想向包含数组中元素的当前索引的每个元素添加一个属性
行号


我之所以需要它,是因为我稍后会更改元素的顺序,但希望能够识别元素的原始位置。

如果foo是一个对象,您可以这样做

foo.Row_Number
如果是列表,则可以使用$.each并对每个对象执行相同的操作

$.each(obj, function (index) {
    this.row_number = index + 1;
});

没有什么特别的事可做。只需迭代数组并将属性添加到每个元素:

for (var i = 0; i < foo.length; i++) {
  foo[i].row_number = i;
}

// or with forEach

foo.forEach(function(row, index) {
  row.row_number = index;
});
for(变量i=0;i

有关JavaScript中嵌套数据结构的更多一般信息,请参阅。

如果希望保留旧对象,或者希望在调用链中不修改现有数组,也可以使用map

let index = 0;
items.forEach((item) => (item.index = index++));
const oldArray = [{a: 'Andy'}, {b: 'Betty'}, {c: 'Charlie'}];
const newArray = oldArray.map((item, index) => ({index, ...item}));
console.log(newArray);
// Array [Object { index: 0, a: "Andy" }, Object { index: 1, b: "Betty" }, Object { index: 2, c: "Charlie" }]

你说的行号是什么意思?您有结果集,并且希望向每一行添加其他属性?因为我在页面中运行的代码是foo.push(foo.shift());它改变了json变量的顺序,我想知道witch elemnt在Foo中是第一位的。你能提供一个数据示例和预期结果吗?到目前为止,你尝试了什么?@Felix Kling:这是一个简单的json变量……主要问题是,如果我在foo中移动并推送一些元素,数组的顺序是改变的,在运行代码之后,foo中第一个元素现在是foo中的最后一个元素,所以你不想向
foo
添加属性,而是向
foo
中的所有对象添加属性?还是只是第一个?举个例子可以说明很多问题。如果我运行代码foo.push(foo.shift()),foo是shift和push项目,foo.Row\u编号在每次我调用该代码时都会更改…那么这不是解决方案为什么要使用
(this)
而不是
this
?JS ForEach效率非常低。使用下面的数组映射回答instead@NafiuLawal当前位置你是如何得出效率低下的结论的?在表面上,贴图解决方案似乎效率较低,因为它为每个元素创建了一个新对象。当然,想要创建数据的副本而不是改变现有数据是有充分理由的。@felixKing对于这个用例来说效率很低,因为他正在对数组进行更改。在这种情况下,map解决方案是更有效的解决方案。我知道下面这篇文章的作者不是这方面的权威,但他在这里说得比我好。