我得到了以下数组:
var arr = [
{
1: {
id: 1,
title: 'test'
},
children: [
{
1: {
id: 2,
title: 'test2'
}
}
]
}
];
直接在数组中的对象是组。 1:是第一语言,2:是第二语言等.id存储在每个语言对象中(由于我正在使用的数据库)。 children数组的构建方式与'arr'数组相同。
多个孩子的例子:
var arr = [
{
1: {
id: 1,
title: 'test'
},
children: [
{
1: {
id: 2,
title: 'test2'
},
children: [
{
1: {
id: 3,
title: 'test3',
},
children: []
}
]
}
]
}
];
现在我需要从这个数组中删除项目。你可以拥有无限的孩子(我的意思是,孩子可以生孩子,可以生孩子等)。我有一个需要发送ID参数的函数。我的想法是获得正确的对象,其中语言1的ID是id参数。我明白了:
function deleteFromArray(id)
{
var recursiveFunction = function (array)
{
for (var i = 0; i < array.length; i++)
{
var item = array[i];
if (item && Number(item[1].ID) === id)
{
delete item;
}
else if (item && Number(item[1].ID) !== id)
{
recursiveFunction(item.children);
}
}
};
recursiveFunction(arr);
}
但是,我正在删除除数组中项目之外的局部变量项。我不知道如何解决这个问题。我一直在寻找互联网,但没有找到任何东西。
答案 0 :(得分:0)
var arr = [{ 1: { id: 1, title: 'test' }, children: [{ 1: { id: 2, title: 'test2' }, children: [{ 1: { id: 3, title: 'test3', }, children: [] }] }] }];
function deleteFromArray(id) {
function recursiveFunction(arr) {
for (var i = 0; i < arr.length; i++) {
var item = arr[i];
if (item && Number(item[1].id) === id) {
arr.splice(i, 1);
} else if (item && Number(item[1].id) !== id) {
item.children && recursiveFunction(item.children);
}
}
};
recursiveFunction(arr);
};
deleteFromArray(2);
document.getElementById("output").innerHTML = JSON.stringify(arr, 0, 4);
&#13;
<pre id="output"></pre>
&#13;
jsfiddle:https://jsfiddle.net/x7mv5h4j/2/
deleteFromArray(2)
会使children
为空,deleteFromArray(1)
会使arr
自行清空。
答案 1 :(得分:0)
如果找到id
,此提案将为递归调用和Array.prototype.some()
提供迭代和短路功能。然后数组与Array.prototype.splice()
拼接。
var arr = [{ 1: { id: 1, title: 'test' }, children: [{ 1: { id: 2, title: 'test2' }, children: [{ 1: { id: 3, title: 'test3', }, children: [] }] }] }];
function splice(array, id) {
return array.some(function (a, i) {
if (a['1'].id === id) {
array.splice(i, 1)
return true;
}
if (Array.isArray(a.children)) {
return splice(a.children, id);
}
});
}
splice(arr, 2);
document.write('<pre>' + JSON.stringify(arr, 0, 4) + '</pre>');
&#13;