Javascript 向数组中的每个元素添加属性/索引
我调用一个返回对象数组的Web服务: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" },
$.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解决方案是更有效的解决方案。我知道下面这篇文章的作者不是这方面的权威,但他在这里说得比我好。