有没有可能(如果可能的话)合并具有相同值的标签,这样一个标签就有了它所有图库的数组?
例如,从以下内容开始:
[{
tag: "Kings",
galleries: [
"2016 Kings Draft Night"
]
}, {
tag: "Draft",
galleries: [
"2016 Kings Draft Night"
]
}, {
tag: "Kings",
galleries: [
"2016-17 Sacramento Kings Uniforms"
]
}]并以此结束:
[{
tag: "Kings",
galleries: [
"2016 Kings Draft Night", "2016-17 Sacramento Kings Uniforms"
]
}, {
tag: "Draft",
galleries: [
"2016 Kings Draft Night"
]
}]任何帮助都是非常感谢的。被这件事难住了
发布于 2016-07-03 11:34:34
你可以filter() to concat() existing tag galleries,同时删除不必要的。
var result = data.filter(function(item) {
var ref = this[item.tag];
if(!ref) {
return (this[item.tag] = item);
}
ref.galleries = ref.galleries.concat(item.galleries);
}, {});
var data = [{
tag: "Kings",
galleries: [
"2016 Kings Draft Night"
]
}, {
tag: "Draft",
galleries: [
"2016 Kings Draft Night"
]
}, {
tag: "Kings",
galleries: [
"2016-17 Sacramento Kings Uniforms"
]
}];
var result = data.filter(function(item) {
var ref = this[item.tag];
if(!ref) {
return (this[item.tag] = item);
}
ref.galleries = ref.galleries.concat(item.galleries);
}, {});
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
发布于 2016-07-03 11:15:38
我相信有更快的方法可以做到这一点。但这是我想出来的:
var data = [{ tag: "Kings", galleries: [ "2016 Kings Draft Night" ] }, { tag: "Draft", galleries: [ "2016 Kings Draft Night" ] }, { tag: "Kings", galleries: [ "2016-17 Sacramento Kings Uniforms" ]}]
var newData = {};
data.forEach(function(a) {
if (!newData[a.tag]) {
newData[a.tag] = a.galleries;
} else {
newData[a.tag] = newData[a.tag].concat(a.galleries);
}
});
var complete = [];
Object.keys(newData).forEach(function(key) {
complete.push({
tag: key,
galleries: newData[key]
});
});
console.log(complete);
发布于 2016-07-03 11:15:58
合并功能:
function merge(a){
var r = {},n = [];
for(var d in a)
r[a[d].tag] = (r[a[d].tag]) ? r[a[d].tag].concat(a[d].galleries) : a[d].galleries;
for(var d in r) n.push({'tag':d,'galleries':r[d]});
return(n);
}还有一个测试:
a = [{tag: "Kings",galleries: ["2016 Kings Draft Night"]},{tag: "Draft",galleries: ["2016 Kings Draft Night"]},{tag: "Kings",galleries: ["2016-17 Sacramento Kings Uniforms"]}];
console.log(merge(a));https://stackoverflow.com/questions/38166370
复制相似问题