web-dev-qa-db-ja.com

指定したキー以外のすべての要素をオブジェクトから削除しますか?

私はオブジェクトを持っています:

"languages": {
    "en":["au", "uk"],
    "de":["de"],
    ....
 }

指定したキー以外のすべてを削除するにはどうすればよいですか。「en」を指定した場合、「en」を含むオブジェクトが必要です:["au"、 "uk"]

10
panthro

単純に、指定したフィールドで新しいオブジェクトを作成できます。

var key = 'en';

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

var res = {}

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

「指定されたキー以外のすべてのキーを削除するにはどうすればよいですか?」という元の質問に対する一般的な解決策(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]);
12
Dave

delete 不要なプロパティを試してください。

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

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

deleteを使用した単純なループはそれを行います。

var key = 'en';
for (var k in obj.languages) {
    if (obj.languages.hasOwnProperty(k) && k != key) {
        delete obj.languages[k];
    }
}
5
Barmar

答えを探していて、以前の答えが助けになり、-コードの機能バージョンを追加しただけです:

function returnNewObjectOnlyValidKeys(obj, validKeys) {
  const newObject = {};
  Object.keys(obj).forEach(key => {
    if (validKeys.includes(key)) newObject[key] = obj[key];
  });
  return newObject;
}
1
Quentin C