[英]Filter an array by value in nested arrays
如果數組的值包含特定字符串,我想返回數組的值
var names= [
["FCFEDA", "Moon Glow"],
["FCFFE7", "China Ivory"],
["FCFFF9", "Ceramic"],
["FD0E35", "Torch Green"],
["FD5B78", "Wild Watermelon"],
["FD7B33", "Crusta Green"]
];
var color_swatches = [];
var result = $.grep(names, function(v,i) {
if(v[1].indexOf("Green") > -1){
return v[0];
}
})
color_swatches.push(result);
alert(color_swatches);
結果是
FD0E35, Torch Green,FD7B33, Crusta Green
我想要這樣
["#FD0E35","#FD7B33"]
請注意,結果應在方括號內並帶有qoutes。 僅包含十六進制而不是等效名稱,並添加#。
有任何想法嗎?
您可以嘗試這樣的事情。
var names= [ ["FCFEDA", "Moon Glow"], ["FCFFE7", "China Ivory"], ["FCFFF9", "Ceramic"], ["FD0E35", "Torch Green"], ["FD5B78", "Wild Watermelon"], ["FD7B33", "Crusta Green"] ]; var color_swatches = []; names.forEach(item => { if(item[1].indexOf("Green") > -1){ color_swatches.push('#' + item[0]); } }); console.log(color_swatches); console.log(JSON.stringify(color_swatches));
.grep()
函數«查找滿足過濾函數的數組的元素» 參考
換句話說,在您的代碼中它將“子數組”返回到result
。
嘗試使用像這樣的簡單循環:
var names= [ ["FCFEDA", "Moon Glow"], ["FCFFE7", "China Ivory"], ["FCFFF9", "Ceramic"], ["FD0E35", "Torch Green"], ["FD5B78", "Wild Watermelon"], ["FD7B33", "Crusta Green"] ]; var color_swatches = []; for(i=0;i<names.length;i++){ if(names[i][1].indexOf("Green") > -1){ color_swatches.push( names[i][0] ); } } //color_swatches.push(result); console.log(JSON.stringify(color_swatches));
注意 ,我僅在控制台中使用JSON.strignify()
來查看color_swatches
數組的內容。
您可以使用map函數來轉換color_swatches
數組。 在地圖功能中,您可以選擇第一項並添加#
。 在警報之前,添加:
color_swatches = $.map(color_swatches[0], function(index, color_swatch) {
return "#" + color_swatch[0];
});
您可以使用JavaScript函數Array#filter
, Array#map
和String#includes
:
var names = [ ["FCFEDA", "Moon Glow"], ["FCFFE7", "China Ivory"], ["FCFFF9", "Ceramic"], ["FD0E35", "Torch Green"], ["FD5B78", "Wild Watermelon"], ["FD7B33", "Crusta Green"] ] console.log(names.filter(n => n[1].includes('Green')).map(n => `#${n[0]}`)) // ["#FD0E35","#FD7B33"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.