【问题标题】:Remove and change values from object从对象中删除和更改值
【发布时间】:2019-01-11 09:06:28
【问题描述】:

我有一个包含以下数据的对象:

   {cost: 2
    field1: 2
    field2: 2
    field3: 2
    field4: 2
    length: 2
    material: 5715382975332352
    name: "name"
    stock: 2
    thickness: 2
    type: "RECTANGULAR"}

现在我想将 field1、field2、field3 和 field4 更改为:

parameters: [2, 2, 2, 2] 所以删除该字段并将它们转换为仅包含值的数组,因此更新后的对象应如下所示:

   {cost: 2
    parameters: [2,2,2,2] //values field1, field2, field3, field4
    length: 2
    material: 5715382975332352
    name: "name"
    stock: 2
    thickness: 2
    type: "RECTANGULAR"}

注意:我也可以更改 field1、field2 等名称,如果这样更容易对数组进行排序。

我尝试了以下但没有运气: Convert object's properties and values to array of key value pairs

【问题讨论】:

    标签: javascript arrays json object


    【解决方案1】:

    步骤:

    1. data 对象中创建一个数组,其属性名为parameters

    2. 将每个data.field* 推入data.parameters 数组。

    3. 之后删除每个data.field*

    无循环

    let data = {cost: 2,
        field1: 2,
        field2: 2,
        field3: 2,
        field4: 2,
        length: 2,
        material: 5715382975332352,
        name: "name",
        stock: 2,
        thickness: 2,
        type: "RECTANGULAR"
    }
    
    data.parameters = [data.field1, data.field2, data.field3, data.field4];
    delete data.field1;
    delete data.field2;
    delete data.field3;
    delete data.field4;
    console.log(data);

    带循环

    let data = {cost: 2,
        field1: 2,
        field2: 2,
        field3: 2,
        field4: 2,
        length: 2,
        material: 5715382975332352,
        name: "name",
        stock: 2,
        thickness: 2,
        type: "RECTANGULAR"
    }
    
    data.parameters = [];
    for (let i = 1; i <= 4; i++){
      data.parameters.push(data["field"+i]);
      delete data["field"+i];
    }
    console.log(data);

    【讨论】:

    • 顺便说一句,有没有办法计算这个对象中的字段并将这个计数添加到循环中?因为对象包含较少的字段 ex。字段1,字段2
    • @holydragon An alternate way 因为您的循环方法仅限于 4 个键。这也不是完全证明,但更具可扩展性。
    【解决方案2】:

    从您的输入对象中获取条目,然后将它们简化为一个新对象,使用键 field 检查道具并将它们分组到一个新的道具 parameters 这是一个数组:

    const data = {
      cost: 1,
      field1: 2,
      field2: 3,
      field3: 4,
      field4: 5,
      length: 6,
      material: 5715382975332352,
      name: "name",
      stock: 7,
      thickness: 8,
      type: "RECTANGULAR"
    };
    
    console.log(Object.entries(data).reduce((acc, val, ind) => {
      if (val[0].includes('field')) {
        acc['parameters'] = acc['parameters'] || [];
        acc['parameters'].push(val[1]);
      }
      else {
        acc[val[0]] = val[1];
      }
      return acc;
    }, {}));

    【讨论】:

      【解决方案3】:

      这样就可以了-

          var a={cost: 2,
              field1: 2,
              field2: 2,
              field3: 2,
              field4: 2,
              length: 2,
              material: 5715382975332352,
              name: "name",
              stock: 2,
              thickness: 2,
              type: "RECTANGULAR"};
             var arr=Object.keys(a);
             var values=[];
             arr.forEach((e)=>{
          if(e.includes('field'))
          {
              
          values.push(a[e]);
          delete a[e];
          }
             })
             a.parameters=values;
             console.log(a);

      【讨论】:

        【解决方案4】:

        你可以这样做..

        <script type="text/javascript">
        
            var obj = {
                cost: 2,
            field1: 2,
            field2: 2,
            field3: 2,
            field4: 2,
            length: 2,
            material: 5715382975332352,
            name: "name",
            stock: 2,
            thickness: 2,
            type: "RECTANGULAR"};
        
            var obj2 = {};
            var arr = [];
        
            for (var k in obj) {
                if(k.includes("field")){ // if key contains field text
                    arr.push(obj[k]);
                } else {
                    obj2[k] = obj[k];   
                }
            }
            obj2['parameters'] = arr;
        
            // your object
            console.log(obj);
            // your desired object
            console.log(obj2);
        
        
        </script>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-08-02
          • 2017-06-19
          • 2017-08-15
          • 1970-01-01
          • 2014-09-06
          • 2016-03-05
          • 2019-07-29
          相关资源
          最近更新 更多