代码之家  ›  专栏  ›  技术社区  ›  sonja

基于公共值将对象合并到多维数组

  •  0
  • sonja  · 技术社区  · 6 年前

    我正在寻找一种基于公共值将对象合并到数组中的方法。我的解决方案应该是动态的,这会给我带来很多麻烦。 下面是一个例子:

    我有一个多维数组(见下面的代码)。它包含一个名为“w·hrung”的列,该列具有数值。

    0: {AGIMENDO Info Objekt 1: "00000000", Beschreibung Kurz: "Test0", Währung: "200.00", __rowNum__: 1}
    1: {AGIMENDO Info Objekt 1: "00000001", Beschreibung Kurz: "Update1", Währung: "456.00", __rowNum__: 2}
    2: {AGIMENDO Info Objekt 1: "00000002", Beschreibung Kurz: "Test2", Währung: "12.00", __rowNum__: 3}
    3: {AGIMENDO Info Objekt 1: "00000003", Beschreibung Kurz: "Test3", Währung: "549153.00", __rowNum__: 4}
    4: {AGIMENDO Info Objekt 1: "00000004", Beschreibung Kurz: "Text", Währung: "1.05", __rowNum__: 5}
    5: {AGIMENDO Info Objekt 1: "00000005", Beschreibung Kurz: "13.08.11", Währung: "465.00", __rowNum__: 6}
    6: {AGIMENDO Info Objekt 1: "00000006", Beschreibung Kurz: "Test21", Währung: "4594.00", __rowNum__: 7}
    

    对于每一行,我遍历每个单元格,并为每个包含数值/日期值的单元格分配一个“类型”。下面的代码显示了这个数组。现在我想基于公共值合并这两个数组(第一个数组是“w··hrung”,第二个数组是“value”)。我试过使用lodash uu.map,u.assign等,但没有得到我想要的输出。

    0: {type: "number", value: "200.00"}
    1: {type: "number", value: "456.00"}
    2: {type: "number", value: "12.00"}
    3: {type: "number", value: "549153.00"}
    4: {type: "number", value: "1.05"}
    5: {type: "date", value: "13.08.11"}
    6: {type: "number", value: "465.00"}
    

    我的目标输出如下(第一行):

    > 0:
    >   AGIMENDO Info Objekt1: "00000000"
    >   Beschreibung Kurz: "Test0" 
    >   Währung:
    >     Value : "200.00" 
    >     Type: "number"
    

    我怎样才能做到这一点?

    3 回复  |  直到 6 年前
        1
  •  1
  •   barbsan Cibi    6 年前

    如果第二个数组包含具有相同值的对象,则必须循环遍历所有属性并替换值。

    var arr1, arr2, result;
    
    arr1 = [
      {"AGIMENDO Info Objekt 1": "00000000", "Beschreibung Kurz": "Test0", Währung: "200.00", __rowNum__: 1},
      {"AGIMENDO Info Objekt 1": "00000001", "Beschreibung Kurz": "Update1", Währung: "456.00", __rowNum__: 2},
      {"AGIMENDO Info Objekt 1": "00000002", "Beschreibung Kurz": "Test2", Währung: "12.00", __rowNum__: 3},
      {"AGIMENDO Info Objekt 1": "00000003", "Beschreibung Kurz": "Test3", Währung: "549153.00", __rowNum__: 4},
      {"AGIMENDO Info Objekt 1": "00000004", "Beschreibung Kurz": "Text", Währung: "1.05", __rowNum__: 5},
      {"AGIMENDO Info Objekt 1": "00000005", "Beschreibung Kurz": "13.08.11", Währung: "465.00", __rowNum__: 6},
      {"AGIMENDO Info Objekt 1": "00000006", "Beschreibung Kurz": "Test21", Währung: "4594.00", __rowNum__: 7}
    ];
    
    arr2 = [
      {type: "number", value: "200.00"},
      {type: "number", value: "456.00"},
      {type: "number", value: "12.00"},
      {type: "number", value: "549153.00"},
      {type: "number", value: "1.05"},
      {type: "date", value: "13.08.11"},
      {type: "number", value: "465.00"}
           ]
    
    result = arr1.map(obj=>{
      let copy = Object.assign({}, obj);
      Object.entries(obj).forEach(([key, val])=>{
        let type = arr2.find(el=>el.value === val);
        if (type){
          copy[key] = type;
        }
      })
      return copy;
    })
    
    console.log(result)
        2
  •  1
  •   evgeni fotia    6 年前

    我不确定你是否愿意 __rowNum__ 是否在外面

    var arrA = [{'AGIMENDO Info Objekt 1': "00000000", 'Beschreibung Kurz': "Test0", 'Währung': "200.00", '__rowNum__': 1}, {'AGIMENDO Info Objekt 1': "00000001", 'Beschreibung Kurz': "Update1", 'Währung': "456.00", '__rowNum__': 2}];
    
    var arrB = [{type: "number", value: "200.00"}, {type: "number", value: "456.00"}];
    
    var resultat = arrA.map((obj, index)=>(    Object.assign(obj, {'Währung': {
         'Value': arrB[index].value,
         'Type': arrB[index].type
      }})
    ));
    
    console.log(resultat);
        3
  •  0
  •   Vishnudev Krishnadas    6 年前

    这应该可以工作,因为您可以直接更新json数组

    json_arr = [{"AGIMENDO Info Objekt 1": "00000000", "Beschreibung Kurz": "Test0", "Währung": "200.00", "__rowNum__": 1},
     {"AGIMENDO Info Objekt 1": "00000001", "Beschreibung Kurz": "Update1", "Währung": "456.00", "__rowNum__": 2}]
    
    function update_type(json_arr, column_name) {    
        for(var i=0; i<json_arr.length; i++){
            element = json_arr[i][column_name];
            json_arr[i][column_name] = {};
            json_arr[i][column_name]['value'] = element;
            json_arr[i][column_name]['type'] = get_type(json_arr[i][column_name]); /* Here comes your type checking function */
       }
       return json_arr
    }
    console.log(update_type(json_arr, "Währung"))