将属性/索引添加到数组

时间:2015-09-16 13:30:08

标签: 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"
    },
    {
        color: "green",
        value: "#0f0"
    },
    {
        color: "blue",
        value: "#00f"
    },
    {
        color: "cyan",
        value: "#0ff"
    }
]

我想为每个元素添加一个属性row_number,其中包含数组中元素的当前索引。

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

4 个答案:

答案 0 :(得分:5)

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

var mock = new Mock<UrlHelper>();
mock.Setup(m => m.Link(It.IsAny<string>(), It.IsAny<object>())).Returns("test url");

var controller = new FooController {
    Url = mock.Object
};

有关JavaScript中嵌套数据结构的更多常规信息,请参阅Access / process (nested) objects, arrays or JSON

答案 1 :(得分:2)

如果您想保留旧对象,或者想要在不修改现有数组的调用链中使用它,也可以使用map。

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" }]

答案 2 :(得分:1)

如果foo是一个对象,你可以做

foo.Row_Number

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

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

答案 3 :(得分:0)

let index = 0;
items.forEach((item) => (item.index = index++));