2017-03-09 20 views
0

私は、引数としてリストをとり、リストの要素を配列に戻さなければならない関数を持っています。例えば 入力の場合:出力は以下のようにlookeすべきリストを配列に変換する

{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

;' '代わりarr.unshift(ノード)の;'要素の順序を変更し、それでも出力フォーマットではないであろう欲しいもの –

答えて

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

は、この、あなたはすべての内部オブジェクト値をつかむために再帰を使用することができます

function listToArray(list){ 
 
    var arr = []; 
 
    for (var node = list; node; node = node.rest) { 
 
     arr.unshift(node.value); 
 

 
    } 
 
    return arr; 
 

 
} 
 
var arr = {'value': 1, 'rest': {'value': 2, 'rest': null}}; 
 
console.log(listToArray(arr));

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; 
 
}


コードゴルフのビット。 ;)

`arr.push(ノード)を使用して

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; 
 
}

関連する問題