2016-12-12 14 views
0

値に基づいて配列をフィルタリングしようとしています。さまざまなプロパティタイプと値に基づいて配列をフィルタリングする

var value = "blue"; // could be red, blue, green, bold, italic 

var array = [{ 
    color: "red", 
    bold: false, 
    italic: false 
}, { 
    color: "blue", 
    bold: false, 
    italic: false 
}, { 
    color: "green", 
    bold: true, 
    italic: false 
}, { 
    color: "green", 
    bold: false, 
    italic: true 
}]; 

フィルタ配列その後

var filtered = []; 

を格納するための新しい配列が、その後がある(下記配列および値です)、私はデータをフィルタリングする解決策を見つけることを試みていました。私は色のためにそれをすることができます:

しかし、値は太字または斜体にすることもできます。では、これらの異なるデータ型を効率的に比較し、データを効率的にフィルタリングする方法はありますか?

+0

あなたはjQueryのを使用していますか?それはこれよりずっとイーグルになるでしょう – Ishey4

+0

はい、私は今です –

答えて

0

場合は、単純なアプローチは非常によく、十分かもしれない:

var value = "bold"; 
 

 
var array = [{color:"red",bold:false,italic:false},{color:"blue",bold:false,italic:false},{color:"green",bold:true,italic:false},{color:"green",bold:false,italic:true}]; 
 

 
var filtered = array.filter(function(item) { 
 
    return item.color === value || 
 
    (value === 'bold' && item.bold) || 
 
    (value === 'italic' && item.italic); 
 
}) 
 

 
console.log(filtered);

1
var value = "green"; 

filtered = array.filter(function(obj) { 
    if (obj.color == value && (obj.bold || obj.italic)) { 
     return obj; 
    } 
}); 
0

色やスタイルでフィルタリングするには2種類の機能が必要です。このような何か作業をする必要があります:colorbolditalicはあなたがすることによってフィルタリングする唯一の基準です

function filterByColor(color) { 
    filtered = array.filter(function(obj) { 
    if (obj.color == "green") { 
     return obj; 
    } 
    }); 
    console.log(filtered); 
} 

function filterByStyle(style) { 
    filtered = array.filter(function(obj) { 
    if (obj[style] === true) { 
     return obj; 
    } 
    }); 
    console.log(filtered); 
} 
1

JQueryを使用すると簡単です

filtered = $.grep(array,function(n,i){return n.color=='green' && n.bold==true}) 

必要に応じてパラメータを変更したり、ネストステートメントを追加したりすることができます。 nはオブジェクトの現在の反復であり、iはカウントです。 returnがtrueの場合、出力に追加されます。

var objet = { 
 
    bold: false, 
 
    italic: false 
 
}; 
 

 
var array = [{ 
 
    color: "red", 
 
    bold: false, 
 
    italic: false 
 
}, { 
 
    color: "blue", 
 
    bold: false, 
 
    italic: false 
 
}, { 
 
    color: "green", 
 
    bold: true, 
 
    italic: false 
 
}, { 
 
    color: "green", 
 
    bold: false, 
 
    italic: true 
 
}]; 
 

 
var philter = (arr, obj) => arr.filter(x => { 
 
    var bool = true; 
 
    for (var prop in obj) 
 
    if (obj[prop] !== x[prop]) 
 
     bool = false; 
 
    return bool; 
 
}) 
 
console.log(philter(array, objet));

0

ためhttp://api.jquery.com/jquery.grep/を参照してください大括弧はプロパティの値を返す表記法です。これは、オブジェクトが色の名前を持つプロパティを持たない限り機能します。

var array = [{"color":"red","bold":false,"italic":false},{"color":"blue","bold":false,"italic":false},{"color":"green","bold":true,"italic":false},{"color":"green","bold":false,"italic":true}]; 
 

 
var value = "italic"; // could be red, blue, green, bold, italic 
 

 
var result = array.filter(function(obj) { 
 
    return obj.color === value || obj[value]; 
 
}); 
 

 
console.log(result);

0

色が値に等しいかどうかを確認し、使用:

は、私は、オブジェクトのプロパティに基づいて一般的な方法でフィルタを提案する詳細

関連する問題