Javascript 创建对象的递归列表
我想在Javascript中创建一个函数,它将数组作为参数并返回一个对象列表。我有这样一个数组:Javascript 创建对象的递归列表,javascript,arrays,object,Javascript,Arrays,Object,我想在Javascript中创建一个函数,它将数组作为参数并返回一个对象列表。我有这样一个数组: var arr= [10,20,30]; console.log(listFunction(arr)); 结果应该如下所示: {'val':10, 'restList':{'val':20, 'restList':{'val':30,'restList':'null'}}} 我已经尝试了forEach函数: function listFunction(parentArr) { var l
var arr= [10,20,30];
console.log(listFunction(arr));
结果应该如下所示:
{'val':10, 'restList':{'val':20, 'restList':{'val':30,'restList':'null'}}}
我已经尝试了forEach函数:
function listFunction(parentArr) {
var listOfObjects = [];
parentArr.forEach(function (entry, thisArg) {
var singleObj = {}
singleObj['val'] = entry;
singleObj['restList'] = singleObj;
listOfObjects[thisArg] = singleObj;
});
return listOfObjects;
};
function listFunction(arr){
if(arr.length == 0){
return null;
}else{
return {val: arr[0], restList: listFunction(arr.slice(1,arr.length))};
}
}
您需要使用递归函数:
function listFunction(parentArr) {
var listOfObjects = [];
parentArr.forEach(function (entry, thisArg) {
var singleObj = {}
singleObj['val'] = entry;
singleObj['restList'] = singleObj;
listOfObjects[thisArg] = singleObj;
});
return listOfObjects;
};
function listFunction(arr){
if(arr.length == 0){
return null;
}else{
return {val: arr[0], restList: listFunction(arr.slice(1,arr.length))};
}
}
您需要使用递归函数:
function listFunction(parentArr) {
var listOfObjects = [];
parentArr.forEach(function (entry, thisArg) {
var singleObj = {}
singleObj['val'] = entry;
singleObj['restList'] = singleObj;
listOfObjects[thisArg] = singleObj;
});
return listOfObjects;
};
function listFunction(arr){
if(arr.length == 0){
return null;
}else{
return {val: arr[0], restList: listFunction(arr.slice(1,arr.length))};
}
}
这是Lisp风格的递归列表算法
var recursiveList = function (array) {
return recursiveListHelper(arr, {});
};
var recursiveListHelper = function (array, obj) {
if (array.length === 0) //stopping condition
return null;
var car = array[0]; //current element
var cdr = array.slice(1); //rest of list
obj = {val: car};
obj.restList = recursiveListHelper(cdr, obj);
return obj;
};
您提到要避免使用Array.slice。此解决方案使用数组索引,而不是拆分为子数组
var recursiveIndexed = function (array) {
return recursiveIndexedHelper(array, {}, 0);
};
var recursiveIndexedHelper = function (array, obj, index) {
if (index == array.length)
return null;
var car = array[index];
obj = {val: car };
obj.restList = recursiveIndexedHelper(array, obj, index + 1);
return obj;
};
例如。这是Lisp风格的递归列表算法
var recursiveList = function (array) {
return recursiveListHelper(arr, {});
};
var recursiveListHelper = function (array, obj) {
if (array.length === 0) //stopping condition
return null;
var car = array[0]; //current element
var cdr = array.slice(1); //rest of list
obj = {val: car};
obj.restList = recursiveListHelper(cdr, obj);
return obj;
};
您提到要避免使用Array.slice。此解决方案使用数组索引,而不是拆分为子数组
var recursiveIndexed = function (array) {
return recursiveIndexedHelper(array, {}, 0);
};
var recursiveIndexedHelper = function (array, obj, index) {
if (index == array.length)
return null;
var car = array[index];
obj = {val: car };
obj.restList = recursiveIndexedHelper(array, obj, index + 1);
return obj;
};
例如。像链表还是像函数Lisp一样的列表?@ryanyyu节点和后续节点的列表。是的,就像链接列表如果最里面的restList应该是{}而不是null会更容易。像链接列表或函数Lisp-like列表?@ryanyyu节点和后续节点的列表。是的,就像链接列表一样,如果最里面的restList应该是{}而不是null,那么会更容易。您可以发送数组的下一个位置。但您需要创建另一个函数。函数列表FunctionRR,索引。。。您需要在每个步骤中增加索引。快速注意:切片函数中不需要arr.length。如果缺少第二个参数,则默认为数组的长度。您可以发送数组的下一个位置。但您需要创建另一个函数。函数列表FunctionRR,索引。。。您需要在每个步骤中增加索引。快速注意:切片函数中不需要arr.length。如果缺少第二个参数,则默认为数组的长度。