我有一系列键:
var arr = ['var1', 'var2', 'var3']
我还有一个Javascript地图对象,其中包含四个键(var1,var2,var3,var4)和值(1,2,3,4),我想通过arr-array过滤,所以我得到一个新的地图对象仅包含键(var1,var2,var3)和值(1,2,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;
}, {});
这将基本上包含对象中包含的每个条目,仅保留具有先前定义的键数组中的键的条目,然后将其减少回对象。