我正在寻找一种基于公共值将对象合并到数组中的方法。我的解决方案应该是动态的,这给我带来很多麻烦。 这是一个示例:
我有一个多维数组(请参见下面的代码)。它包含一个名为“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 _.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"
我该如何实现?
答案 0 :(得分:1)
我不确定您是否希望__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);
答案 1 :(得分:1)
如果第二个数组包含具有相同值的对象,则必须遍历所有属性并替换值。
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 :(得分:0)
这应该可以工作,因为您可以直接更新json数组
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="select-activity">
<option>Activity One</option>
<option>Activity Two</option>
<option>Activity Three</option>
</select>
<div id="today">
<div class="row-body">
<div class="sessionactivity">Activity One</div>
<div class="sessionlocation">The Swimming Pool</div>
</div>
<div class="row-body">
<div class="sessionactivity">Activity Two</div>
<div class="sessionlocation">The Main Hall</div>
</div>
<div class="row-body">
<div class="sessionactivity">Activity Three</div>
<div class="sessionlocation">The Main Hall</div>
</div>
</div>