Javascript:如何在一个查找数组中匹配多个变量?

时间:2018-08-13 18:55:21

标签: javascript arrays lookup

下面的实时示例
假设我想将城市缩写与城市名称相匹配。最简单的方法是什么?我尝试使用查找,但不确定如何将变量数组与查找数组匹配。

所以,我想得到结果:Los AngelesSan 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);

5 个答案:

答案 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 truereturn false

请检查此小提琴以获取更多信息:LIVE DEMO

答案 4 :(得分:-1)

非常简单的方法:

1)将输入排列为数组
2)将数组与表格/字典/地图/查找进行匹配

[input1, input2, input3].forEach(cityCode => console.log(result[cityCode]));