2017-11-07 9 views
0

私は自分の状態でselectedSizeListを持っています。各値が真である場合にのみオブジェクトを配列に変換する方法

selectedSizeList = {1: false, 2: true, 3: true, 4: true, 5: false} 

selectedSizeListをこの配列に変換するにはどうすればよいですか?

[2,3,4]

これよりもアルゴリズムは優れていますか?

let array = []; 
Objects.keys(selectedSizeList).maps((item) => { 
    if(item.value) array.push(item.value) 
); 
return array; 

答えて

2

あなたはtrue値を持つすべてのキーをフィルタリングするためにarray#filterを使用することができます。

const selectedSizeList = {1: false, 2: true, 3: true, 4: true, 5: false}; 
 
const result = Object 
 
       .keys(selectedSizeList) 
 
       .filter(k => selectedSizeList[k]) 
 
       .map(Number); 
 
console.log(result);

1

(私は私の解決策が正しくないと仮定)この(O(n)のソリューションを)試してみてください。

selectedSizeList = {1: false, 2: true, 3: true, 4: true, 5: false}; 
 

 
var arr = []; 
 
for (var key in selectedSizeList) { 
 
    if(selectedSizeList[key]){ 
 
     arr.push(key); 
 
    } 
 
} 
 

 
console.log(arr);

3

まず第一に、その後Object.keys()を使用して配列のキーを取得し、 filter()を使用して、このような値のtrueのみをフィルタリングしてください。

var selectedSizeList = {1: false, 2: true, 3: true, 4: true, 5: false}; 
 

 
var keys = Object.keys(selectedSizeList); 
 

 
var filtered = keys.filter(function(key) { 
 
    return selectedSizeList[key] 
 
}); 
 

 
console.log(filtered);

0

あなたは、新しい配列を返すためにArray.prototype.filter()を使用できることをan`array返すためにObject.keys()を使用することができます。あなたは、文字列としての数字の配列を返しますtrueに等しい値のためにフィルタリングすることができる配列を取得するためにObject.keysを使用することができます

selectedSizeList = {1: false, 2: true, 3: true, 4: true, 5: false}; 
 
let array = Object.keys(selectedSizeList).filter((item) => { 
 
\t if(selectedSizeList[item]) return item; 
 
    }); 
 
    //returns [2,3,4]

0

。次に、番号を使用して配列をマップして、数値ストリングを数値に変換します。これは、この結果で何を行うかに応じて必要な場合としない場合があります。私はこれをあなたが再利用できるか、少なくともあなたのオブジェクトをハードコード化していないような関数に入れます。

var selectedSizeList = {1: false, 2: true, 3: true, 4: true, 5: false}; 
 

 
// Re-usable function not tied to specific object 
 
const filterForTrueValue = (obj) => Object 
 
             .keys(obj) 
 
             .filter(k => obj[k]) 
 
             .map(Number); 
 

 
console.log(filterForTrueValue(selectedSizeList));

関連する問題