2016-05-07 12 views
0

以下の関数は、(潜在的にネストされた)オブジェクトの値を配列として返します。私がbreak文をforループの後に移動すると、エラーは出ませんが、もちろん私の関数は必要に応じて動作しません。私がブレークを使用している方法に何が問題なのですか?予期せぬトークンブレークが三項条件で発生する

function listToArray(list) { 
 
    var objectArray = []; 
 
    function objectPeeler() { 
 
     let peel = Object.getOwnPropertyNames(list); 
 
     for(var i = 0; i < peel.length; i++) { 
 
      list[peel[i]] && typeof list[peel[i]] != 'object' ? 
 
       objectArray.push(list[peel[i]]): 
 
       list[peel[i]] ? 
 
        (list = list[peel[i]], objectPeeler()) : 
 
        break; 
 
     } 
 
    return objectArray; 
 
    } 
 
    objectPeeler(); 
 
}

+4

[ 'break']( https://developer.mozi lla.org/en-US/docs/Web/JavaScript/Reference/Statements/break)は、単独で使用することを意図した声明です。 [三項演算子](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator)が期待するように、値式として使用することはできません。条件付きで 'break 'するには、三項演算子の代わりに' if..else'を使いたいでしょう。 –

+3

Ugg ..可読性の観点から決して*決して*演算子をネストしないでください。 –

+0

三項演算子をネストする場合、if elseブロックを使用するだけではどうですか? – evolutionxbox

答えて

0

誰がこの問題を持っている:三項演算子は、唯一の値式、ではない(ブレイクのような)ステートメントで作業をし、これらの場合に使用されるものではありません。

function listToArray(list) { 
 
    var objectArray = []; 
 
    function objectPeeler() { 
 
     let peel = Object.getOwnPropertyNames(list); 
 
     for(var i = 0; i < peel.length; i++) { 
 
      list[peel[i]] != null && typeof list[peel[i]] != 'object' ? 
 
       objectArray.push(list[peel[i]]): 
 
       list[peel[i]] ? 
 
        (list = list[peel[i]], objectPeeler()): null; 
 
     } 
 
    } 
 
    objectPeeler(); 
 
    return objectArray; 
 
}

しかし、jqueryの.next法を使用して、より良い解決策を可能にする:

これは動作

function listToArray(list) { 
 
    var array = []; 
 
    for (var obj = list; obj; obj = obj.next) 
 
    array.push(obj.value); 
 
    return array; 
 
}

0

なぜこのような何か書いていない:場合

var obj = { 0: "a", 1: "b", 2: "c"}; //test target 
var objectArray = []; 
var keyArray = Object.getOwnPropertyNames(obj); 
for (var i = 0; i < keyArray.length; i++) objectArray.push(obj[keyArray[i]]); 
console.log(objectArray); // test result 
関連する問題