Я пытаюсь создать логику для работы над массивом объектов, но перед тем, как правильно поставить его в шаблон, у меня возникла проблема. Кто-нибудь знает, как это будет работать. Пример ниже:
arrayElement: [
{"name":xy,"age":1},
{"name":xy,"age":2},
{"name":xy,"age":3},
{"name":xy,"age":4},
{"name":yz,"age":1},
{"name":yz,"age":2},
{"name":u,"age":1},
{"name":u,"age":2},
]
Это массив, и теперь я хочу использовать элементы в таблице данных, но xy должен иметь весь связанный с ним элемент и yz, который также применим к u.
<template slot="items" slot-scope="props">
<div>{{props.item.name}}</div>
<div v-for="item in items"> <input>{{props.item.age}}</input></div>
</template>
Я делаю что-то вроде этого, но он дает мне каждую строку, подобную этой
xy 1
xy 2
xy 3
xy 4
Но я хочу так
xy 1
2
3
4
yz 1
2
u 1
2
Вы должны построить еще одну коллекцию, которая является "рассчитанной" стоимостью. Затем вы можете использовать эту коллекцию для итерации в соответствии с вашими потребностями.
Например,
{
xy: [1,2,3,4],
yz: [1,2],
u: [1]
}
Edit: добавлена простая JS-версия, как ее преобразовать. Вы можете использовать это и сделать вычисляемое свойство Vue.
//Data
var orig = [
{"name":'xy',"age":1},
{"name":'xy',"age":2},
{"name":'xy',"age":3},
{"name":'xy',"age":4},
{"name":'yz',"age":1},
{"name":'yz',"age":2},
{"name":'u',"age":1},
{"name":'u',"age":2}
];
//Define function
function makeMultimap(input){
var out = {}; //Object ~ Dictionary ~ HashMap
for(var i=0;i<input.length;i++){
var row = input[i];
var name = row.name;
var age = row.age;
var outVal = out[name];
if(outVal==undefined){
out[name] = [];
outVal = out[name];
}
outVal.push(age);
}
console.log(input);
console.log(out);
}
//Execute by passing data
makeMultimap(orig);
В Vue это будет примерно так:
computed:{
arrayMultiMap: function(input){
var out = {}; //Object ~ Dictionary ~ HashMap
for(var i=0;i<input.length;i++){
var row = input[i];
var name = row.name;
var age = row.age;
var outVal = out[name];
if(outVal==undefined){
out[name] = [];
outVal = out[name];
}
outVal.push(age);
}
console.log(input);
console.log(out);
return out;
}
}
Теперь вы можете использовать arrayMultiMap
как будто это свойство.
arrayElement
?