我有一个函数,它将列表作为参数,并且必须将列表的元素返回到数组中。 例如,在输入的情况下:
{value: 1, rest: {value: 2, rest: null}}
输出应该像:
[1, 2]
这就是我试图解决的问题:
function listToArray(list){
var arr = [];
for (var node = list; node; node = node.rest) {
arr.unshift(node);
}
return arr;
}
console.log(listToArray({value: 1, rest: {value: 2, rest: null}}));
我得到的输出是:
[{value: 2, rest: null}, {
value: 1
rest: {value: 2, rest: null}
}]
有谁知道我应该改变什么才能让它发挥作用?
答案 0 :(得分:2)
您刚从节点中错过了.value
。
function listToArray(list){
var arr = [];
for (var node = list; node; node = node.rest) {
arr.unshift(node.value);
}
return arr;
}
console.log(listToArray({value: 1, rest: {value: 2, rest: null}}));

请注意,您可能需要push
而不是unshift
。
答案 1 :(得分:0)
您可以使用递归来获取所有内部对象值。
var obj = {value: 1, rest: {value: 2, rest: null}};
var list = objToList(obj, 'value', 'rest');
console.log(list);
function objToList(obj, valueField, targetField) {
return objToListInner(obj, valueField, targetField, []);
}
function objToListInner(obj, valueField, targetField, list) {
if (isObject(obj)) {
list.push(obj[valueField]);
objToListInner(obj[targetField], valueField, targetField, list)
}
return list;
}
function isObject(obj) {
return obj !== null && typeof obj === 'object';
}
.as-console-wrapper {
top: 0;
max-height: 100% !important;
}
一点代码打高尔夫球。 ;)
let obj = {value: 1, rest: {value: 2, rest: null}},
list = objToList(obj, 'value', 'rest');
console.log(list);
function objToList(o, v, t, l) {
return o ? objToList(o[t], v, t, (l||[]).concat(o[v])) : (l||[])
}
.as-console-wrapper {
top: 0;
max-height: 100% !important;
}