2016-12-16 68 views
0

我想返回數組的值,如果其值包含一個特定的字符串篩選在嵌套數組由值的陣列

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內。只包含十六進制不等同的名稱和#添加。

任何想法?

+0

另一種:除非你需要支持一些古老的瀏覽器,你可以跳過jQuery和使用香草JS:VAR結果= names.filter(function(v){ return v [1] .indexOf(「Green」)> -1; })。map(function(w){#} + w [0]; }); –

+0

你不需要jQuery來實現這一點。 [看我的回答](http://stackoverflow.com/a/41178944/652669)。 :) –

回答

1

.grep()功能«查找滿足過濾器功能的數組的元素»reference

換句話說,在代碼中它返回的「子陣列」到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陣列的內容。

0

您可以使用地圖功能來轉換color_swatches陣列。在地圖功能中,您可以選取第一項並添加#。提醒之前,請添加:

color_swatches = $.map(color_swatches[0], function(index, color_swatch) { 
    return "#" + color_swatch[0]; 
}); 
2

您可以嘗試類似這樣的操作。

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 => { 
 
\t if(item[1].indexOf("Green") > -1){ 
 
     color_swatches.push('#' + item[0]); 
 
    } 
 
}); 
 
console.log(color_swatches); 
 
console.log(JSON.stringify(color_swatches));

+0

我需要完全像這樣[「#FD0E35」,「#FD7B33」] –

+0

與我的區別在哪裏? – Xzandro

0

您可以使用JavaScript函數Array#filterArray#mapString#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"]