Javascript将新元素添加到元素数组(如果不存在)

Javascript将新元素添加到元素数组(如果不存在),javascript,arrays,reactjs,reduce,Javascript,Arrays,Reactjs,Reduce,我有这样一个数组: [{"x": 2020-06-27T08:00:00.000Z, "y": 33}, {"x": 2020-06-27T10:00:00.000Z, "y": 500}, {"x": 2020-06-27T12:00:00.000Z, "y": 98}, {"x": 2020-06-27T14:00:00.000Z, "

我有这样一个数组:

 [{"x": 2020-06-27T08:00:00.000Z, "y": 33},
 {"x": 2020-06-27T10:00:00.000Z, "y": 500},
 {"x": 2020-06-27T12:00:00.000Z, "y": 98},
 {"x": 2020-06-27T14:00:00.000Z, "y": 344},
 {"x": 2020-06-27T22:00:00.000Z, "y": 1}]
数组已从最早到最晚进行预排序。我需要做的是,通过数组的“x”(这是一个日期),检查是否有偶数小时(如0,2,4..或22)不存在,如果不存在,则在日期中添加一个小时“x”和“y”值等于零的新条目

有什么有效的方法吗? 最后,数组应该类似于:

[{"x": 2020-06-27T00:00:00.000Z, "y": 0},
 {"x": 2020-06-27T02:00:00.000Z, "y": 0},
 {"x": 2020-06-27T04:00:00.000Z, "y": 0},
 {"x": 2020-06-27T06:00:00.000Z, "y": 0},
 {"x": 2020-06-27T08:00:00.000Z, "y": 33}, 
 {"x": 2020-06-27T10:00:00.000Z, "y": 500}]

依此类推,

使用矩库生成所有时间计划,然后使用map函数传输数组

var start=time.utc(“2020-06-27”).startOf(“日”);
var end=时刻utc(“2020-06-27”).endOf(“日”);
const-origaray=[{“x”:“2020-06-27T08:00:00.000Z”,“y”:33},{“x”:“2020-06-27T10:00:00.000Z”,“y”:500},{“x”:“2020-06-27T12:00:00.000Z”,“y”:98},{“x”:“2020-06-27T14:00:00.000Z”,“y”:344},{“x”:“2020-06-27T22:00:00.000Z”,“y”:1}]
const schedulesArray=[]
让currentTime=开始
while(currentTime.isBefore(end)){
schedulesArray.push(currentTime.toISOString())
currentTime=currentTime.add(2,‘小时’)
}
const newArray=schedulesArray.map(t=>{
常量existingOrig=origArray.filter(o=>o.x==t)
如果(现有原点长度>0){
返回JSON.stringify(existingOrig[0])
}否则{
常量newObj={}
newObj.x=t
newObj.y=0
返回JSON.stringify(newObj)
}
});
console.log('arr'+newArray)

我建议将数组转换为以日期为键的对象,或者将日期和“y”值放在两个不同的数组中。如果坚持使用数组而不是对象,则需要迭代以检查
x
是否存在。为此,您可以使用二进制搜索,因为数组已排序。您是在检查单个值,还是在检查缺少偶数小时的所有实例?