Объединить объект в многомерный массив на основе общего значения - PullRequest
0 голосов
/ 22 октября 2018

Я ищу способ объединить объект в массив на основе общего значения.Мое решение должно быть синонимом, что доставляет мне много хлопот.Вот пример:

У меня есть многомерный массив (см. Код ниже).Он содержит столбец с именем «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» и второго массива это «значение». Я пытался использовать lodash _.map, _.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 ]

0 голосов
/ 22 октября 2018

Вы должны пройти через все свойства и заменить значение, если второй массив содержит объект с таким же значением.

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)
0 голосов
/ 22 октября 2018

Это должно работать, так как вы можете напрямую обновить массив 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"))
0 голосов
/ 22 октября 2018

Я не уверен, хотите ли вы, чтобы __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);
...