下面的实时示例
假设我想将城市缩写与城市名称相匹配。最简单的方法是什么?我尝试使用查找,但不确定如何将变量数组与查找数组匹配。
所以,我想得到结果:Los Angeles
,San Francisco
input1 = "LA";
input2 = null;
input3 = "SF";
result = {
"LA": "Los Angles",
"NY": "New York",
"SF": "San Francisco"
}[input1, input2, input3];
document.write(result);
console.log(result);
答案 0 :(得分:1)
有多种方法(map / forEach / reduce / while loop & shift :)
)等。下面是一些示例:
注意:我将undefined
替换为N/A
,并且在reduceReplace
函数中跳过了任何falsy等。
var objMap = { "LA": "Los Angles", "NY": "New York", "SF": "San Francisco"}
var match = ['LA', undefined, 'SF']
const mapReplace = (arr) => arr.map(x => !!x ? objMap[x] : 'N/A')
const reduceReplace = (arr) => arr.reduce((r, c) => { !!c ? r.push(objMap[c]) : r; return r }, [])
const shiftReplace = (arr) => {
var result = []
while(arr.length > 0) {
result.push(objMap[arr.shift()])
}
return result;
}
console.log('map: ', mapReplace(match)) // This will just replace the strings
console.log('reduce: ', reduceReplace(match)) // This will also skip any undefined/null etc
console.log('shift: ', shiftReplace(match)) // Just for fun
这里的reduce方法只是具有一个函数来摆脱伪造的值,如果您想在数组中使用undefined
,则根本不需要它,因为map
会通过每个元素并返回相同大小的数组结果。
显然,您还可以使用forEach
和其他方法来一次遍历数组一个元素。
答案 1 :(得分:0)
您可以使用map
。如果要保留任何未定义的空值:
const input = ["LA", null, "SF"];
const abbreviations = {
"LA": "Los Angles",
"NY": "New York",
"SF": "San Francisco"
};
const result = input.map(e => abbreviations[e]);
console.log(result);
或过滤null / false / undefined:
const input = ["LA", null, "SF"];
const abbreviations = {
"LA": "Los Angles",
"NY": "New York",
"SF": "San Francisco"
};
const result = input.map(e => abbreviations[e]).filter(e => e);
console.log(result);
请注意,您用于查找对象的result
变量名称与结果数组冲突,因此我对您的名称进行了一些调整。
答案 2 :(得分:0)
您可以filter
keys
,然后reduce
main object
基于它。
input1 = "LA";
input2 = null;
input3 = "SF";
var input=[input1,input2,input3];
var data = {
"LA": "Los Angles",
"NY": "New York",
"SF": "San Francisco"
}
var filtered=Object.keys(data)
.filter(key => input.includes(key))
.reduce((obj, key) => {
obj[key]=data[key];
return obj;
}, {});
console.log(filtered);
console.log(Object.values(filtered));
答案 3 :(得分:-1)
以我为例:
您可能可以使用const cityKey = Object.keys(result);
来仅获取object
内部的密钥。 (此输出为Array
类型)
第二步是filter
这个数组(cityKey
)。而且,如果一次迭代符合您的条件,则可以return true
或return false
请检查此小提琴以获取更多信息:LIVE DEMO
答案 4 :(得分:-1)
非常简单的方法:
1)将输入排列为数组
2)将数组与表格/字典/地图/查找进行匹配
[input1, input2, input3].forEach(cityCode => console.log(result[cityCode]));