2016-12-16 65 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"]