Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果javascript中的某些键相同,则在对象中推送数组_Javascript_Arrays_Sorting_Object - Fatal编程技术网

如果javascript中的某些键相同,则在对象中推送数组

如果javascript中的某些键相同,则在对象中推送数组,javascript,arrays,sorting,object,Javascript,Arrays,Sorting,Object,我有一个类似这样的代码 var data = [ {'times':'07:50','name':'bojes'}, {'times':'07:50','name':'unknw1q2q'}, {'times':'09:50','name':'rafik'}, {'times':'11:50','name':'adit'}, {'times':'15:50','name':'adit'}, {'times':'15:50','name':'adrok'} ]; var ne

我有一个类似这样的代码

 var data = [
 {'times':'07:50','name':'bojes'},
 {'times':'07:50','name':'unknw1q2q'},
 {'times':'09:50','name':'rafik'},
 {'times':'11:50','name':'adit'},
 {'times':'15:50','name':'adit'},
 {'times':'15:50','name':'adrok'}
  ]; 
var newData = [
 {'times':'07:50','name': ['bojes','unknw1q2q'] },
 {'times':'09:50','name': ['rafik'] },
 {'times':'11:50','name': ['adit'] },
 {'times':'15:50','name': ['adit','adrok'] },
  ]; 
我将对对象“name”进行分组,如果“times”相同,则将其推入一个新数组。我知道这就像玩array.reduce,在下划线js中查找数据,或者类似的坏东西,但我的逻辑不好。

如果你能像这样输出我的代码,我会很高兴的

 var data = [
 {'times':'07:50','name':'bojes'},
 {'times':'07:50','name':'unknw1q2q'},
 {'times':'09:50','name':'rafik'},
 {'times':'11:50','name':'adit'},
 {'times':'15:50','name':'adit'},
 {'times':'15:50','name':'adrok'}
  ]; 
var newData = [
 {'times':'07:50','name': ['bojes','unknw1q2q'] },
 {'times':'09:50','name': ['rafik'] },
 {'times':'11:50','name': ['adit'] },
 {'times':'15:50','name': ['adit','adrok'] },
  ]; 
我怎么能做到?
有人想帮我吗?thx在它之前

您可以使用
reduce
findIndex
。使用reduce创建一个新数组(也可以使用map)。使用
findIndex
时间匹配的数组中获取对象的索引。如果是,则更新名称数组,否则创建一个新对象并推入累加器数组

var数据=[{
《泰晤士报》:07:50,
“name”:“bojes”
},
{
《泰晤士报》:07:50,
'name':'unknw1q2q'
},
{
《泰晤士报》:09:50,
“名称”:“拉菲克”
},
{
《泰晤士报》:11:50,
“名称”:“施工支洞”
},
{
《泰晤士报》:15:50,
“名称”:“施工支洞”
},
{
《泰晤士报》:15:50,
“name”:“adrok”
}
];
设k=data.reduce(函数(acc,curr){
//检查时间是否存在
设findIndex=acc.findIndex(功能(项目){
return item.times==curr.times
})
如果(findIndex==-1){
设obj=Object.assign({}{
泰晤士报:当前泰晤士报,
名称:[当前名称]
})
附件推送(obj)
}否则{
acc[findIndex].name.push(当前名称)
}
返回acc;
}, []);

log(k)
您可以通过创建一个对象来有效地实现这一点,该对象的键控对象是您想要唯一的--
次。每次使用数组创建一个对象以保存值。最后,对象的
Object.values()
将是您想要的。这将比每次在列表中搜索重复项更有效:

var data=[{'times':'07:50','name':'bojes'},{'times':'07:50','name':'unknw1q2q'},{'times':'09:50','name':'rafik'},{'times':'11:50','name':'adit'},{'times':'15:50','name':'adit'},{'times':'15:50','name':'adrik'};
设res=Object.values(data.reduce)((obj,curr)=>{
//如果我们没有看到之前的时间做一个新的条目
如果(!obj[curr.times])obj[curr.times]={times:curr.times,名称:[]}
//将当前名称推入当前时间条目
对象[curr.times]['name'].push(curr.name)
返回obj
}, {}))

console.log(res)
这里有一种方法,您可以使用和:

const数据=[
{'times':'07:50','name':'bojes'},
{'times':'07:50','name':'unknw1q2q'},
{'times':'09:50','name':'rafik'},
{'times':'11:50','name':'adit'},
{'times':'15:50','name':'adit'},
{'times':'15:50','name':'adrok'}
];
const groupByTimes=data=>Object.values(data.reduce((data,{times,name})=>{
if(data[times])data[times].name.push(name);
else数据[times]={times,name:[name]};
返回数据;
}, {}));

日志(groupByTimes(数据))“但我的逻辑不好”-你能告诉我们你到目前为止尝试了什么吗?我可以准确地将一些对象键分组为“时间”。但是我的对象键“name”循环太多,没有按“times”排序,甚至它可以列出数据,但数据与键“time”不一样,我的意思是用你用来循环数组的代码编辑你的问题。在你的问题中创建一个新的代码可以帮助我们理解你的思维过程(并发现明显的错误)。好吧,如果你认为比以前更好,那么就编辑吧。我不能编辑你的问题并输入你自己的代码——我不知道你已经尝试了什么。不管怎样,你已经得到了一些答案。@ Raffikbojjes,请考虑接受这个答案。