如何检查数组中的相似项并根据相似项使用javascript合并值?

如何检查数组中的相似项并根据相似项使用javascript合并值?,javascript,Javascript,我有一系列的数据,比如 [ { "day": "Mon", "time": "11:00AM – 10:00PM" }, { "day": "Tue", "time": "11:00AM – 10:00PM" }, { "day": "Wed", "time": "11:00AM – 10:00PM" }, { "day": "Thu", "time": "11:00AM – 10:00PM" }, { "day": "Fri", "time": "11:00AM –

我有一系列的数据,比如

[
  { "day": "Mon", "time": "11:00AM – 10:00PM" }, 
  { "day": "Tue", "time": "11:00AM – 10:00PM" }, 
  { "day": "Wed", "time": "11:00AM – 10:00PM" }, 
  { "day": "Thu", "time": "11:00AM – 10:00PM" }, 
  { "day": "Fri", "time": "11:00AM – 11:00PM" }, 
  { "day": "Sat", "time": "11:00AM – 11:00PM" }, 
  { "day": "Sun", "time": "11:00AM – 10:00PM" }
]
我想要的是,如果太阳到周四的时间相同,它就会变成

[
  {"day":"Sun-Thu", "time":"11:00AM – 10:00PM"},
  {"day":"Fri-Sat","time":"11:00AM – 11:00PM"}
]
我试过了

for (var i = 0; i < jsonData.length; i++) {
  for (var j = i + 1; j < jsonData.length;) {
    if (jsonData[i].time == jsonData[j].time) {

      var hour = {
        day: jsonData[i].day + "-" + jsonData[j].day,
        time: jsonData[i].time
      }
      arr.push(hour);
      jsonData.splice(i, 1);
      jsonData.splice(j - 1, 1);
    } else {
      j++;
    }
  }
}
请帮助我如何获得预期数据


谢谢

试试这个提示

var a = [
  { "day": "Mon", "time": "11:00AM – 10:00PM" }, 
  { "day": "Tue", "time": "11:00AM – 10:00PM" }, 
  { "day": "Wed", "time": "11:00AM – 10:00PM" }, 
  { "day": "Thu", "time": "11:00AM – 10:00PM" }, 
  { "day": "Fri", "time": "11:00AM – 11:00PM" }, 
  { "day": "Sat", "time": "11:00AM – 11:00PM" }, 
  { "day": "Sun", "time": "11:00AM – 10:00PM" }
]

var b = a.filter(function(rm){return rm.time == "11:00AM – 11:00PM"})

var t = {}

for(var i =0;i<b.length;i++){
if(t[b[i].time]){
t[b[i].time] = t[b[i].time]+"-"+ b[i].day
}else{
t[b[i].time] = b[i].day
}
}
var a=[
{“日”:“周一”,“时间”:“上午11:00–晚上10:00”},
{“日”:“周二”,“时间”:“上午11:00–晚上10:00”},
{“日”:“周三”,“时间”:“上午11:00–晚上10:00”},
{“日”:“周四”,“时间”:“上午11:00–晚上10:00”},
{“日”:“周五”,“时间”:“上午11:00–下午11:00”},
{“日”:“周六”,“时间”:“上午11:00–下午11:00”},
{“日”:“日”,“时”:“上午11:00–晚上10:00”}
]
var b=a.filter(函数(rm){return rm.time==“11:00AM–11:00PM”})
var t={}

对于(var i=0;i您可以这样做:

var arr=[{day:“Mon”,“time:“11:00AM–10:00PM”},{“day:“Tue”,“time:“11:00AM–10:00PM”},{“day:“Wed”,“time:“11:00AM–10:00PM”},{“day:“time:“11:00AM–10:00PM”},{“day:“Fri”,“time:“11:00AM–11:00PM”},{“day:“Sat”,“time:“day:”11:00AM–11:00PM”},{“day:“Sun”,“time:“day:“day:“Sun”,“time:” }];
//将“太阳”设置为一周的第一天
arr.unshift(arr.pop());
var结果=arr.REDUCT((a,c)=>{
//检查最后一个范围的时间是否与当前元素的时间相同。
设same=a.length&&a[a.length-1]。time==c.time&&a[a.length-1];
如果(相同){
//将范围的最后一天(如果有)替换为当前元素的日期
same.day=same.day.replace(/\-.*$/,“”)+“-”+c.day;
}否则{
//将当前元素添加到结果数组中,因为其时间与最后一个元素的时间不同。
a、 推动(c)
}
返回a;
}, []);

console.log(result);
您想按时间分组吗?SO上的答案不应该是提示。他们应该解释问题和解决方案。请阅读。SO上的答案不应该是“试试这个”。他们应该解释问题和解决方案。请阅读。虽然我对您的解决方案投了更高的票,因为它非常优雅,但您应该更好地使用“流行音乐星期天在榜首"部分。可能是下一个数组的星期六-星期四,下一个数组的星期五-星期一,等等。@ScottMarcus我添加了一些注释,试图解释代码的作用。这只是稍微好一点,但我怀疑经验有限的人会对代码的含义有所了解。您的注释说明了代码的作用,但没有解释regular表达式语法、箭头函数语法、
.reduce()
方法等。甚至没有任何指向资源的链接,人们可以在这些资源中了解更多这些内容。如果在几天内出现间隔,则此代码中会有一个bug–例如
[{day:'Mon',…},{day:'Wed',…},…},
var a = [
  { "day": "Mon", "time": "11:00AM – 10:00PM" }, 
  { "day": "Tue", "time": "11:00AM – 10:00PM" }, 
  { "day": "Wed", "time": "11:00AM – 10:00PM" }, 
  { "day": "Thu", "time": "11:00AM – 10:00PM" }, 
  { "day": "Fri", "time": "11:00AM – 11:00PM" }, 
  { "day": "Sat", "time": "11:00AM – 11:00PM" }, 
  { "day": "Sun", "time": "11:00AM – 10:00PM" }
]

var b = a.filter(function(rm){return rm.time == "11:00AM – 11:00PM"})

var t = {}

for(var i =0;i<b.length;i++){
if(t[b[i].time]){
t[b[i].time] = t[b[i].time]+"-"+ b[i].day
}else{
t[b[i].time] = b[i].day
}
}