按键数组过滤javascript地图对象

时间:2018-01-16 14:18:40

标签: javascript arrays dictionary filter

我有一系列键:

var arr = ['var1', 'var2', 'var3']

我还有一个Javascript地图对象,其中包含四个键(var1,var2,var3,var4)和值(1,2,3,4),我想通过arr-array过滤,所以我得到一个新的地图对象仅包含键(var1,var2,var3)和值(1,2,3)。有谁知道我怎么能这样做?

3 个答案:

答案 0 :(得分:3)

您可以使用reduce(1)填充新对象:

var map = {a: 1, b: 2, c: 3};
var keys = ["b", "c", "d"];

var c = keys.reduce(function(obj, key) {
    if (map.hasOwnProperty(key)) obj[key] = map[key];
    return obj;
}, {}); // {b: 2, c: 3}

答案 1 :(得分:0)

您必须使用delete 运算符才能删除一个对象的属性。

var arr = ['var1', 'var2', 'var3']
var obj = { var1:1, var2:2, var3:3, var4:4};
var newObj = Object.assign({}, obj);
Object.keys(newObj).forEach(function(key){
   if(!arr.includes(key))
    delete newObj[key];
});
console.log(newObj);

答案 2 :(得分:0)

如果我没弄错的话,你会遇到以下情况:

const keysToKeep = ["var1", "var2", "var3"];
const object = {
  "var1": 1,
  "var2": 2,
  "var3": 3
};

如果是这种情况,那么您可以执行以下操作:

const filtered = Object.entries(object)
.filter(e => keysToKeep.includes(e[0]))
.reduce((acc, entrt)=>{
  acc[entry[0]] = entry[1];
  return acc;
}, {});

或者

const filtered = Object.entries(object)
.map(e => ({
  "key": e[0],
  "value": e[1]
})).filter(e => keysToKeep.includes(e.key))
.reduce((acc, entry)=>{
  acc[entry.key] = entry.value;
  return acc;
}, {});

这将基本上包含对象中包含的每个条目,仅保留具有先前定义的键数组中的键的条目,然后将其减少回对象。