如何解决在数组内移动对象Javascript
arr = [{"class":"section"},{"fieldGroup":[]},{"class":"col","name":"input"},"name":"dropdown"},"name":"date"},"name":"table"}]
现在我需要用 "class":"col"
移动包含 "fieldGroup"
的前一个对象内的对象
所以我想要的输出应该是这样的
arr = [{"class":"section"},{"fieldGroup":[{"class":"col","name":"date"}]},"name":"table"}]}]
我试过这段代码
arr.forEach((item: any,index: number) => {
if (item.class === "col") {
arr[index - 1].fieldGroup.push(item);
arr.splice(index,1);
}else {
return arr;
}
})
但收到错误提示 cannot read property push of undefined
有什么帮助吗?
解决方法
您的问题是,当您使用 .splice()
从数组中删除一项时,您 arr
中的所有项都会向下移动一个索引。例如,曾经位于索引 3
的项目现在位于索引 2
,曾经位于索引 4
的项目现在位于索引 {{1} } 等。您的 3
循环没有考虑到这种转变,因此一旦您使用 .forEach()
删除索引 2
处的项目,您的 .splice()
更改为 {{1 }} 进行下一次迭代,但实际上,您需要再次查看索引 index
,因为您的数组项已经向下移动了一个索引。您可以通过使用标准 3
循环并在删除项目以再次查看 th 时递减索引计数器来解决此问题:
2
var a = [
{ class: "section" },{ fieldGroup: [] },{ class: "col",name: "input" },{ class: "dropdown" },{ class: "date" },name: "table" },];
var res = [];
var currFieldGroup = null;
for (var i in a) {
if ("fieldGroup" in a[i]) {
currFieldGroup = a[i];
res.push(a[i]);
} else if ("class" in a[i]) {
if (currFieldGroup) {
currFieldGroup.fieldGroup.push(a[i]);
} else {
res.push(a[i]);
}
}
}
console.log(res);
,
试试...
git push origin main
,
试试这个:
var arr = [{
"class": "section"
},{
"fieldGroup": []
},{
"class": "col","name": "input"
},{
"class": "dropdown"
},{
"class": "date"
},"name": "table"
}
];
let fieldGroupPosition;
let finalArr = [];
let lastGroupPosition = null;
arr.forEach((item,index) => {
if (Array.isArray(item.fieldGroup)) {
finalArr.push({
fieldGroup: []
});
lastGroupPosition = finalArr.length - 1;
} else {
if (lastGroupPosition)
finalArr[lastGroupPosition].fieldGroup.push(item);
else
finalArr.push(item);
}
});
console.log(finalArr);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。