【问题标题】:Leave objects by the list of keys. Pure JS通过键列表保留对象。纯JS
【发布时间】:2022-01-11 14:06:16
【问题描述】:

我想创建一个没有性别字段的新对象数组。哪里错了?

let collections = [
    { name: "Tom", gender: "male", age: 12 },
    { name: "Becky", gender: "female", age: 11 },
    { name: "Huck", gender: "male", age: 13 }
  ];
  let newCollections = collections.slice();
  let operations = {
    select: function () {
      let args = [].slice.call(arguments);
      for (let i = 0; i < newCollections.length; i++) {
        for (let key in newCollections[i]) {
          for (let j = 0; j < args.length; j++) {
            if (key !== args[j]) {
              delete key;
              return newCollections;
            } } } } } }; 
const result = operations.select("name", "age");// the list of fields to save

console.log(result);

【问题讨论】:

  • 除了 slice 之外不使用数组原型有什么相关原因吗?

标签: javascript for-loop javascript-objects


【解决方案1】:

您可以创建一个 omit() 函数,该函数将返回一个没有给定属性的对象。

然后我们可以使用Array.map() 通过这个来运行数组中的每一项:

let collections = [ { name: "Tom", gender: "male", age: 12 }, { name: "Becky", gender: "female", age: 11 }, { name: "Huck", gender: "male", age: 13 } ];

function omit(obj, field) {
    return (({ [field]: _, ...result }) => result)(obj);
}

let newCollections = collections.map(person => omit(person, 'gender'));
console.log('New collections:', newCollections);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    【解决方案2】:

    您可以使用地图方法来做到这一点:

    const array_without_gender = collections.map(el => {
        return {name: el.name, age: el.age};
    })
    

    此代码将创建由没有性别键的对象填充的新数组,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2019-02-08
      • 2020-01-23
      • 2012-08-09
      • 2018-06-13
      • 2017-06-14
      • 1970-01-01
      相关资源
      最近更新 更多