我有一个对象数组:
[{a:1;b:2},{a:3;b:4},{a:5;b:6},{a:7;b:8},{a:9;b:10}]
输入是a的值,如1,我希望输出为相应b的值,例如返回2。
我有一个天真的方法来遍历数组并返回结果。我想知道是否有更好的解决方案?比如将数组映射到a的值数组,并获取输入的索引,然后使用我们得到的索引获取输出。
另一个解释是a的值是相同的,它们不是值,示例用于说明问题。
示例:
INPUT: 1 OUTPUT:2
INPUT: 3 OUTPUT:4
INPUT: 5 OUTPUT:6
INPUT: 7 OUTPUT:8
我的代码是这样的:
var test=function(obj){
var a=obj.map(function(item){
return item.a;
})
return obj[a.indexof("1")].b;
}
答案 0 :(得分:2)
您可以预处理对象数组以创建单个对象,该对象将a
的值作为键,b
的值作为对应的值,Array.prototype.reduce
,如此
> var d = [{a: 1, b: 2}, {a: 3, b: 4}, {a: 5, b: 6}, {a: 7, b: 8}, {a: 9, b: 10}];
undefined
> var lookup = d.reduce(function (result, currentObject) {
... result[currentObject.a] = currentObject.b;
... return result;
... }, {});
undefined
> lookup
{ '1': 2, '3': 4, '5': 6, '7': 8, '9': 10 }
然后你可以得到与lookup
中的数字相对应的值,就像这个
> lookup[5]
6
> lookup[9]
10
如果lookup
中没有您要查找的值,您将获得undefined
。
> lookup[11]
undefined
答案 1 :(得分:1)
我认为这可能很好
var obj = [{a:1,b:2},{a:3,b:4},{a:5,b:6},{a:7,b:8},{a:9,b:10}];
function get_it(_v){
for(x=0;x<obj.length;x++) if(obj[x].a == _v) return obj[x].b;
}
console.log(get_it(prompt('Insert your number:')));
答案 2 :(得分:1)
这就是你想要的。但是,当数组中有更多具有a
匹配针的对象时,您需要考虑可能的情况。
function getBbyA(input, needle) {
for (var index in input) {
if (input[index].a === needle) {
return input[index].b;
}
}
return null;
}
答案 3 :(得分:1)
.headcol {
position: relative;
background-color:white;
}
&#13;