Javascript 基于其他属性查询多维数组属性

Javascript 基于其他属性查询多维数组属性,javascript,arrays,Javascript,Arrays,下面是一个场景 我有以下多维数组: [ [1, 'red', 'x', true], [1, 'red', 'y', true], [1, 'red', 'z', false], [2, 'red', 'x', true], [2, 'red', 'y', false], [2, 'red', 'z', false], [1, 'blue', 'x', true], [1, 'blue', 'y', true], [1, '

下面是一个场景

我有以下多维数组:

[
    [1, 'red', 'x', true],
    [1, 'red', 'y', true],
    [1, 'red', 'z', false],
    [2, 'red', 'x', true],
    [2, 'red', 'y', false],
    [2, 'red', 'z', false],
    [1, 'blue', 'x', true],
    [1, 'blue', 'y', true],
    [1, 'blue', 'z', false],
    [2, 'blue', 'x', true],
    [2, 'blue', 'y', true],
    [2, 'blue', 'z', false]
]
用户可以选择前三个属性中的任意两个,我需要返回剩余数组的true或false列表

例如,如果用户选择“蓝色”和“x”,我将返回:1:true,2:true

可能并不总是有3个选项,可能有更多或只有一个


有人对此有优雅的解决方案吗?

我制作了一个函数,将结果放入数组,下面是

函数getMatch(b,c){ var=0; 对于(var i=0;iA)而言,这将非常优雅:

var data = […];
var selected = [ , 'blue', 'x', ]; // could be any two
                                   // note the sparse array!

var result = data.filter(function(item) {
    return selected.every(function(v, i) {
        return item[i] == v;
    });
}); // [[1,"blue","x",true],
    //  [2,"blue","x",true]]
如果要将该列表作为对象,请使用

var key = [0, 1, 2].filter(function(k){ return ! (k in selected); })[0];
var obj = result.reduce(function(m, item) {
    m[item[key]] = item[3];
    return m;
}, {}); // {"1":true,"2":true}

我做了一个小函数来搜索一个数组的数据非常容易,你所要做的就是为数据定义一个映射

函数:()

示例地图(用于您的数据):

var map = {
    color: 1,
    XYZ: 2,
    result: 3
}
var example = findInData(data, map, {color: 'blue', XYZ: 'x'})
color:1
因为颜色的值位于数据数组的
[1]
位置

用法示例:

var map = {
    color: 1,
    XYZ: 2,
    result: 3
}
var example = findInData(data, map, {color: 'blue', XYZ: 'x'})
返回

{"1":true}
{"2":true}

假设您所展示的结构,没有特别优雅的方法可以做到这一点。您必须在外部数组中循环寻找匹配项。数据是否必须这样构造?识别
'blue'
对应于第二个索引而不是第一个或第三个索引的逻辑是什么?如果不是,可能会提高可用性这些都是对象,而不是数组。不幸的是,数据结构不在我的控制范围内。@T.J.Crowder:虽然循环可以优雅地完成,但看看我的答案:-)谢谢ZetCoby,但它的动态性还不够。我不知道将选择哪个顺序数据,甚至不知道它将存储在哪个顺序。你的意思是它可以像这样[2',红色',“y',假],或者像这样[false',红色',“2',y'],?好的,我重新设计了这个函数,在控制台的代码笔中查看,无论输入顺序或数组顺序如何,它都应该输出与以前相同的结果,这是非常好的…在这里,我编写了这个复杂的搜索函数,它将是模块化的,可以与任何数据集一起工作,结果却发现它内置在JS xD+1中