首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在此对象中合并?(javascript)

是否可以在此对象中合并?(javascript)
EN

Stack Overflow用户
提问于 2016-07-03 11:04:17
回答 6查看 53关注 0票数 1

有没有可能(如果可能的话)合并具有相同值的标签,这样一个标签就有了它所有图库的数组?

例如,从以下内容开始:

代码语言:javascript
复制
[{
    tag: "Kings",
    galleries: [
        "2016 Kings Draft Night"
    ]
}, {
    tag: "Draft",
    galleries: [
        "2016 Kings Draft Night"
    ]
}, {
    tag: "Kings",
    galleries: [
        "2016-17 Sacramento Kings Uniforms"
    ]
}]

并以此结束:

代码语言:javascript
复制
[{
    tag: "Kings",
    galleries: [
        "2016 Kings Draft Night", "2016-17 Sacramento Kings Uniforms"
    ]
}, {
    tag: "Draft",
    galleries: [
        "2016 Kings Draft Night"
    ]
}]

任何帮助都是非常感谢的。被这件事难住了

EN

回答 6

Stack Overflow用户

发布于 2016-07-03 11:34:34

你可以filter() to concat() existing tag galleries,同时删除不必要的。

代码语言:javascript
复制
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);
}, {});

代码语言:javascript
复制
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>');

票数 2
EN

Stack Overflow用户

发布于 2016-07-03 11:15:38

我相信有更快的方法可以做到这一点。但这是我想出来的:

代码语言:javascript
复制
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);

票数 1
EN

Stack Overflow用户

发布于 2016-07-03 11:15:58

合并功能:

代码语言:javascript
复制
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);
}

还有一个测试:

代码语言:javascript
复制
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));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38166370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档