J'ai le tableau suivant:
var tst =
[
{"topicId":1,"subTopicId":1,"topicName":"a","subTopicName":"w"},
{"topicId":1,"subTopicId":2,"topicName":"b","subTopicName":"x"},
{"topicId":1,"subTopicId":3,"topicName":"c","subTopicName":"y"},
{"topicId":2,"subTopicId":4,"topicName":"c","subTopicName":"z"}
]
Existe-t-il un moyen simple de mapper cela à ce type de tableau où topicId> id et topicName> nom:
var t =
[
{"id":1,"name":"a"},
{"id":2,"name":"c"}
]
J'utilise un navigateur moderne et j'ai également _lodash si cela aide. Notez qu'il y aura environ 100 lignes dans le tableau tst donc je n'ai pas besoin d'une solution très optimisée. Une solution simple et facile à entretenir serait plus importante.
LE PLUS RÉCENT
_. uniqBy est maintenant préférable
Exemple de travail complet ici
var tst = [
{"topicId":1,"subTopicId":1,"topicName":"a","subTopicName1":"w"},
{"topicId":2,"subTopicId":2,"topicName":"b","subTopicName2":"x"},
{"topicId":3,"subTopicId":3,"topicName":"c","subTopicName3":"y"},
{"topicId":1,"subTopicId":4,"topicName":"c","subTopicName4":"z"}
];
var result = _.map(_.uniqBy(tst, 'topicId'), function (item) {
return {
id: item.topicId,
name: item.topicName
};
});
console.log(result);
[~ # ~] héritage [~ # ~]
http://lodash.com/docs#uniq est un bon début
_.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
Votre code ressemblerait à ceci pour obtenir des sujets uniques par identifiant
var t = _.uniq(tst, 'topicId');
[~ # ~] modifier [~ # ~]
J'ai fait un jsfiddle
[~ # ~] mise à jour [~ # ~]
Suppression de l'unicité inutile des noms
Je fais partie de ces gars qui utilisent des fonctions natives :)
var results = tst.reduce(function(res,topic){
var exists = res.some(function(t){ return (t.id === topic.topicId && t.name === topic.topicName);});
if (!exists){
res.Push({"id": topic.topicId, "name": topic.topicName});
}
return res; },[]);
version Lodash
Je ne suis pas un expert de lodash, j'essaierai probablement quelque chose comme ceci:
var results = _.reduce(tst, function(res, topic){
var exists = _.findIndex(res, function(t){
return (t.id === topic.topicId && t.name === topic.topicName);
});
if (exists === -1){
res.Push({"id": topic.topicId, "name": topic.topicName});
}
return res;
},[]);