我需要包装数组的每个元素,甚至是子元素,我正在使用JavaScript

问题描述 投票:0回答:2

我需要包装数组的每个元素,甚至是子元素。

输入:

var array = [
{"name":"name1"},
{"name":"name2"},
{"name":"name3", children : [{"id":"1"}]}];

所需的输出:

var newArray = [
{elem : {"name":"name1"}},
{elem : {"name":"name2"}},
{elem : {"name":"name3", children : [{elem : {"id":"1"}}]}}];

我已经完成以下工作:

function insertKey(array){
    for (var i = 0; i<array.length; i++){
        tempItem = {elem : array[i]}
        newarray.push(tempItem);
    }
}

//输出:

 newarray = 
[{elem:{"name":"name1"}},
 {elem:{"name":"name2"}},
 {elem:{"name":"name3"}}]

但是问题出在孩子身上。我尝试了以下内容,但无法正常工作。

function insertKey(array){
    for (var i = 0; i<array.length; i++){
        tempItem = {elem : array[i]}
        newarray.push(tempItem);
        insertKey(array[i]);
    }

}

提前感谢。

javascript jquery arrays recursion wrapper
2个回答
0
投票

您可以尝试遍历数组的每个对象,并将它们添加到新数组中。这样就可以提供您想要的输出。将函数定义为:-

function f(array){
newArray=[]
for(i of array){
newArray.push({elem:i})
}
return newArray
}

var array = [
{"name":"name1"},
{"name":"name2"},
{"name":"name3", children : [{"id":"1"}]}];

newArray=f(array)
console.log(newArray)

0
投票

听起来像您想要这样的东西:

function insertKey(array) {
    const newarray = [];
    for (let i = 0; i < array.length; i++) {
        const tempItem = {elem : array[i]};
        if (array[i].children) {
            tempItem.children = array[i].children.map(child => ({elem: child}));
        }
        newarray.push(tempItem);
    }
    return newarray;
}

新的条件映射每个孩子并按照您的描述进行包装。您将像这样使用它:

const newarray = insertKey(array);

编辑:请注意,此解决方案仅适用于一层嵌套。如果您需要进一步说明,那么您的问题(如上所述)不会为我们提供足够的信息,因为我们不知道您要包装的数据的架构。

© www.soinside.com 2019 - 2024. All rights reserved.