除指定键外,从对象中删除所有元素?

23

我有一个对象:

"languages": {
    "en":["au", "uk"],
    "de":["de"],
    ....
 }
我如何仅保留特定键,比如说我指定'en',那么我只需要一个包含"en":["au", "uk"]的对象。

创建一个新的对象,仅包含提取的键和值?使用任何一个能够根据任意标准拒绝对象键的百万JS库? - Dave Newton
所以你想移除所有的键,除了'en' - Mike Cluck
5个回答

42

从Rajaprabhu的答案中精练出来的“如何删除除指定键以外的所有键”的通用解决方案:

validKeys = [ 'a', 'b', 'c' ];
userInput = { "a":1, "b":2, "c":3, "d":4, "e":5 }

Object.keys(userInput).forEach((key) => validKeys.includes(key) || delete userInput[key]);

21

简单来说,您可以创建一个具有指定字段的新对象;

var key = 'en';

var o = {
    "languages": {
        "en": ["au", "uk"],
        "de": ["de"]
    }
}

var res = {}

res[key] = o.languages[key];

15
这个人可能会点踩,因为这只是一个解决方法,不是对实际问题的答案。来到这里的人可能正在寻找与标题相符的答案,而不是这个特定情况的解决方法。 - Sandwich
这不是一个理想的解决方案。为什么?因为在原始数组中不存在key的情况下,我们会创建一个新的数组条目,并带有键和未定义的值。这可能是不可取的。 - pjb

13

尝试使用delete删除不需要的属性。

var obj = { "languages": { "en":["au", "uk"],"de":["de"] }};

Object.keys(obj.languages).forEach(function(itm){
  if(itm != "en") delete object.languages[itm];
});

6
一个简单的循环使用 delete 就可以完成。
var key = 'en';
for (var k in obj.languages) {
    if (obj.languages.hasOwnProperty(k) && k != key) {
        delete obj.languages[k];
    }
}

“key”变量应该在if语句中使用,对吧? - NotSimon

2

我正在寻找答案,之前的回答对我有帮助,只是我需要一个可用版的代码,以下是我所需的:

最初的回答:
function returnNewObjectOnlyValidKeys(obj, validKeys) {
  const newObject = {};
  Object.keys(obj).forEach(key => {
    if (validKeys.includes(key)) newObject[key] = obj[key];
  });
  return newObject;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接