将嵌套对象的每个对象的索引设置为属性

时间:2018-08-01 13:03:20

标签: javascript object nested

早上好!

有人知道我如何将嵌套对象的每个对象的索引插入属性吗?

类似的东西:

const myObj = 
{
  "@type": "someType",
  A: [
    {
      "@type": "someType0",
      order: "DESC",
      myIndex: 0
    },
    {
      "@type": "someType1",
      order: "DESC",
      myIndex: 1
    },
    {
      "@type": "someType2",
      order: "DESC",
      myIndex: 2
    }
  ],
  B: [],
};

4 个答案:

答案 0 :(得分:1)

您可以使用.map函数更改数组中的对象。

const myObj = 
{
  "@type": "someType",
  A: [
    {
      "@type": "someType0",
      order: "DESC"      
    },
    {
      "@type": "someType1",
      order: "DESC"      
    },
    {
      "@type": "someType2",
      order: "DESC"      
    }
  ],
  B: [],
};

const newA = myObj.A.map((item,index) => {
  item.myIndex = index;
  return item;
})

console.log(newA);

CodePen链接:https://codepen.io/bergur/pen/rrdyKX?editors=0010

如果要遍历myObj的所有属性,可以使用Object.keys(myObj),然后遍历它们并一一更改。

答案 1 :(得分:1)

您可以执行以下操作:遍历数组并将i(迭代的当前索引)分配给对象属性,例如myObj.A.forEach((d, i) => d.myIndex = i);,其中d-是当前项目,而{{ 1}}-是当前索引。

i

答案 2 :(得分:1)

您可以使用递归方法,并为所有数组添加索引。

function setIndex(object) {
    Object.values(object).forEach(v => {
        if (Array.isArray(v)) {
            v.forEach((o, i) => {
                o.index = i;
                setIndex(o);
            });
        }
    });
}

const object = { "@type": "someType", A: [{ "@type": "someType0", order: "DESC" }, { "@type": "someType1", order: "DESC" }, { "@type": "someType2", order: "DESC" }], B: [] };

setIndex(object);

console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 3 :(得分:1)

您可以结合使用Object.keysObject.valuesArray.forEach来实现此目的。以您的'myObject'变量为起点,像这样...

使用Object.keys

/* loop through keys of 'myObject' */
Object.keys(myObject).forEach(function(key) {
    /* check that 'myObject[key] is an Array &&
       loop through items in each 'myObject[key]'
       to add unique 'myIndex' property */
    Array.isArray(myObject[key]) && myObject[key].forEach(function(obj, idx) {
        obj.myIndex = idx;
    });
});

使用Object.values

/* loop through 'myObject' property values */
Object.values(myObject).forEach(function(val) {
    /* check 'val' is an Array &&
       loop through each item in 'val' 
       to add unique 'myIndex' property */
    Array.isArray(val) && val.forEach(function(obj, idx) {
        obj.myIndex = idx;
    });
});

希望有帮助。 :-D