早上好!
有人知道我如何将嵌套对象的每个对象的索引插入属性吗?
类似的东西:
const myObj =
{
"@type": "someType",
A: [
{
"@type": "someType0",
order: "DESC",
myIndex: 0
},
{
"@type": "someType1",
order: "DESC",
myIndex: 1
},
{
"@type": "someType2",
order: "DESC",
myIndex: 2
}
],
B: [],
};
答案 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.keys
或Object.values
和Array.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