【问题标题】:How to keep only wanted fields in a JavaScript object?如何在 JavaScript 对象中只保留想要的字段?
【发布时间】:2019-01-01 08:41:09
【问题描述】:

例如,我有

const eva = {name: "Eva", age: 3, hobby: "dance", state: "NY"};
const ann = {name: "Ann", age: 9, hobby: "read", state: "WA", schoolyear: 3};

我想要一个修剪功能,它只保留我想要的字段。

const fields = ["name", "age", "state"]

输出将是

const eva2 = {name: "Eva", age: 3, state: "NY"};
const ann2 = {name: "Ann", age: 9, state: "WA"};

我无法遍历所有字段并删除循环内的字段。这将提前结束循环。

谢谢!

【问题讨论】:

  • Remove json element的可能重复
  • 没有重复。我不知道要删除的特定字段。我无法遍历 key,因为这样会提前结束循环。
  • 只是删除它? delete eva.hobby?
  • 那么要么你的问题不清楚(至少对我来说),要么你误解了引用的问题/答案

标签: javascript


【解决方案1】:

使用 delete 从对象中删除键。创建一个函数,该函数将接受一个对象,其中键将被删除。现在在该函数内部执行Object.keys,它将创建一个包含对象所有键的数组。然后迭代该数组并使用indexOf 检查该项目是否存在于主数组中。如果没有,则使用delete 运算符从对象中删除键

const eva = {
  name: "Eva",
  age: 3,
  hobby: "dance",
  state: "NY"
};
const ann = {
  name: "Ann",
  age: 9,
  hobby: "read",
  state: "WA",
  schoolyear: 3
};


const fields = ["name", "age", "state"];

function delKey(obj) {
  let objKeys = Object.keys(obj)
  objKeys.forEach(function(item) {
    if (fields.indexOf(item) === -1) {
      delete obj[item]
    }
  })
  return obj
}
console.log(delKey(eva))
console.log(delKey(ann))

【讨论】:

    【解决方案2】:

    使用删除功能,这里是一个简单的例子:

    const eva = {name: "Eva", age: 3, hobby: "dance", state: "NY"};
    const ann = {name: "Ann", age: 9, hobby: "read", state: "WA", schoolyear: 3};
    const fields = ["name", "age", "state"]
    // get the keys in the object
    var keys = Object.keys(eva);
    // loop over all the keys
    for(var i = 0; i < keys.length; i++)
      // check if it's in the array of fields to keep 
      if (fields.indexOf(keys[i]) < 0)
         // delete the property because it isnt in fields
         delete eva[keys[i]];
    
    console.log(eva);

    【讨论】:

    • 这给了我 ""Uncaught SyntaxError: Unexpected identifier""
    • @YixingLiu 是的,这是因为 const 在 OP 中拼写错误,它延续到我的示例中,我现在已经修复了它
    【解决方案3】:

    你可以使用Array.prototype.reduce()更简洁地做到这一点

    const eva = { name: "Eva", age: 3, hobby: "dance", state: "NY" };
    const allowedKeys = ['name', 'age', 'state'];
    
    const newObject = Object.keys(eva).reduce(function(newObj, key) {
        if (allowedKeys.indexOf(key) !== -1) {
            newObj[key] = eva[key];
        }
        return newObj;
    }, {});
    
    console.log(newObject);
    

    【讨论】:

      猜你喜欢
      • 2023-02-23
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      相关资源
      最近更新 更多