Javascript 通过指定键从key、val对象中查找值

Javascript 通过指定键从key、val对象中查找值,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我试图通过给出键,从对象的键,值对中找到值。 钥匙在数组中 var arr = ["1398","1392","1390"]; var objects = { 1384: "registerItem", 1386: "createGroups", 1388: "vipNumbers", 1390: "targetNumbers", 1392: "ignoredNumbers", 1394: "globalConstants", 1396: "Users", 1398: "systemConfig

我试图通过给出键,从对象的键,值对中找到值。 钥匙在数组中

var arr = ["1398","1392","1390"];
var objects = { 1384: "registerItem", 1386: "createGroups", 1388: "vipNumbers", 1390: "targetNumbers", 1392: "ignoredNumbers", 1394: "globalConstants", 1396: "Users", 1398: "systemConfiguration", 1400: "applicationErrors" };
我需要从键位于数组中的对象中查找所有值。我该怎么做? 到目前为止,我做到了:

for (var a=0; a<arr.length;a++) {
    console.log(arr[a]);
}

for (var k in objects){
    if (typeof objects[k] !== 'function') {
         console.log(k + ", " + objects[k]);
    }
}

for(var a=0;a您可以通过
对象[arr[0]]找到值
将返回
systemConfiguration

其中
0
1
2
arr


您可以循环查找所有。例如:

var arr=[“1398”、“1392”、“1390”];
变量对象={
1384:“注册项”,
1386:“创建组”,
1388:“vipNumbers”,
1390:“目标号码”,
1392:“忽略的数字”,
1394年:“全球恒量”,
1396:“用户”,
1398:“系统配置”,
1400:“应用程序错误”
};
for(arr中的var键){
if(对象类型[arr[key]]!='undefined')console.log(对象[arr[key]]);

}
您可以循环数组,然后检查当前索引是否在对象中:

var objects={1384:“registerItem”,1386:“createGroups”,1388:“VipNumber”,1390:“TargetNumber”,1392:“IgnoredNumber”,1394:“globalConstants”,1396:“Users”,1398:“systemConfiguration”,1400:“applicationErrors”};
var arr=[“1398”、“1392”、“1390”];
arr.forEach(函数(条目){
if(objects中的条目)console.log(objects[entry]);
});
我该怎么做

只需通过传递
回调
函数来使用
map
方法

var arr=[“1398”、“1392”、“1390”];
变量对象={
1384:“注册项”,
1386:“创建组”,
1388:“vipNumbers”,
1390:“目标号码”,
1392:“忽略的数字”,
1394年:“全球恒量”,
1396:“用户”,
1398:“系统配置”,
1400:“应用程序错误”
};
console.log(arr.map(a=>objects[a]);
我需要从键位于数组中的对象中查找所有值

var arr = ["1398","1392","1390"];
var objects = { 1384: "registerItem", 1386: "createGroups", 1388: "vipNumbers", 1390: "targetNumbers", 1392: "ignoredNumbers", 1394: "globalConstants", 1396: "Users", 1398: "systemConfiguration", 1400: "applicationErrors" };
在ES5环境中,我可能会使用and,使用or检查(取决于您是否要检查原型),以查看对象是否具有密钥:

var arr=[“1398”、“1392”、“1390”];
var objects={1384:“registerItem”,1386:“createGroups”,1388:“VipNumber”,1390:“TargetNumber”,1392:“IgnoredNumber”,1394:“globalConstants”,1396:“Users”,1398:“systemConfiguration”,1400:“applicationErrors”};
var值=[];
arr.forEach(功能(键){
如果(输入对象){
值。推送(对象[键]);
}
});
console.log(值);
您可以使用pick方法

var arr=[“1398”、“1392”、“1390”];
var objects={1384:“registerItem”,1386:“createGroups”,1388:“VipNumber”,1390:“TargetNumber”,1392:“IgnoredNumber”,1394:“globalConstants”,1396:“Users”,1398:“systemConfiguration”,1400:“applicationErrors”};
console.log(u.pick(对象,arr))
//价值观
console.log(u.chain(objects).pick(arr.values().value());

尝试减少数组,或者创建一个新对象
{}
并为对象中存在的键获取
键、值
对,或者创建一个新数组
[]
并不断推送对象中存在的键的值。具体取决于您的要求

arr.reduce(function(init, key) {
    if(objects[key]) { init[key] = objects[key]; };
    return init;
}, {});

使用
下划线
lodash
可以更好地从数组端进行迭代,并将对象用作映射,而不是从对象端进行迭代,现在您可以:


(arr.map(k=>objects[k]).compact().value()

for(arr中的var k){console.log(objects[k])}
我建议您将“如果(objects[arr[key]]!=未定义)”循环中的逻辑。在这种情况下,如果给定的数组包含对象中不存在的元素,您将得到未定义的。@Rainman:但是如果属性的值是
未定义的
,怎么办?检查
未定义的
不是检查对象是否具有给定属性的正确方法。好吧,但是从对象一侧迭代,然后取值不是一个好主意,最好是迭代数组并使用对象作为散列,然后从性能角度考虑。检查我的答案。