【问题标题】:Adding key value pair to specific objects in an array将键值对添加到数组中的特定对象
【发布时间】:2016-05-20 09:07:10
【问题描述】:

我有一个如下所示的对象数组:

[{headerName: "Test 1", field: "Test 1", type_id: 1}, {headerName: "Test 2", field: "Test 2", type_id: 2}, {headerName: "Test 3", field: "Test 3", type_id: 3}, {headerName: "Name", field: "Name", type_id: 3}, {headerName: "Income", field: "Income", type_id: 2}]

这只是数组可能看起来的一个基本示例,因为它可以是任意长度。基本上我需要做的是,当 type_id 为 3 时,我需要为数组中的这些对象添加一个额外的键/值对。

我该怎么做呢?

任何帮助将不胜感激。

感谢您的宝贵时间。

更新:

我要添加的键/值对是:cellRenderer: customEditor

【问题讨论】:

  • 添加模范extra key/value
  • 我已经添加了我要添加的键/值对

标签: arrays object reactjs ag-grid


【解决方案1】:

es6解决方案

yourArray = yourArray.map( obj => {
    if( obj.type_id === 3 ){
      return { ...obj, cellRenderer: customEditor };
    }
    return obj;
}

es5解决方案

yourArray = yourArray.map( function( obj ){
    if( obj.type_id === 3 ){
      Object.defineProperty(obj, "cellRenderer", { value : customEditor })
    }
    return obj;
}

【讨论】:

  • 出于好奇:为什么Object.defineProperty 而不是简单的obj.cellRenderer = customEditor
  • @pawel 在这个用例中不是一个特别的原因,但有些情况下,比如计算属性非常方便。
【解决方案2】:

使用Array.mapObject.keys函数的解决方案:

var arr = [{headerName: "Test 1", field: "Test 1", type_id: 1}, {headerName: "Test 2", field: "Test 2", type_id: 2}, {headerName: "Test 3", field: "Test 3", type_id: 3}, {headerName: "Name", field: "Name", type_id: 3}, {headerName: "Income", field: "Income", type_id: 2}],
    extraObj = {'cellRenderer': 'customEditor'};

arr.map(function(obj){
   if (obj['type_id'] === 3) {
       Object.keys(this).forEach((k) => obj[k] = this[k]);
   }
}, extraObj);

console.log(JSON.stringify(arr, 0, 4));

输出:

[
    {
        "headerName": "Test 1",
        "field": "Test 1",
        "type_id": 1
    },
    {
        "headerName": "Test 2",
        "field": "Test 2",
        "type_id": 2
    },
    {
        "headerName": "Test 3",
        "field": "Test 3",
        "type_id": 3,
        "cellRenderer": "customEditor"
    },
    {
        "headerName": "Name",
        "field": "Name",
        "type_id": 3,
        "cellRenderer": "customEditor"
    },
    {
        "headerName": "Income",
        "field": "Income",
        "type_id": 2
    }
]

【讨论】:

    【解决方案3】:

    另一个组合 mapObject.assign

    var data = [{headerName: "Test 1", field: "Test 1", type_id: 1}, {headerName: "Test 2", field: "Test 2", type_id: 2}, {headerName: "Test 3", field: "Test 3", type_id: 3}, {headerName: "Name", field: "Name", type_id: 3}, {headerName: "Income", field: "Income", type_id: 2}];
    
    var extend = { cellRenderer: 'customEditor' }
    
    data = data.map( item => {
      if( item.type_id == 3 ){
        return Object.assign( item, extend );
      }
      return item;
    });
    

    【讨论】:

      猜你喜欢
      • 2018-08-04
      • 2014-07-09
      • 2019-07-03
      • 1970-01-01
      • 2022-12-28
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      相关资源
      最近更新 更多