gpt4 book ai didi

javascript - 检查对象是否有 key ,如果有,添加新 key : value to said object

转载 作者:行者123 更新时间:2023-11-30 14:15:21 25 4
gpt4 key购买 nike

我有一个遍历数据数组 plotData 的循环。在 plotData 之外,我构建了另一个名为 visiblePoints 的数组。然后我遍历 visiblePoints 来构建一个对象 thisRow,然后我将 thisRow 添加到循环外的一个数组,称为 dataArray:

var dataArray = []

for (i = 0; i < plotData.length; i++) {

// This filters datapoints array into another array
var visiblePoints = filterPoints(plotData[i].datapoints)

// Get the string for the thisRow object key name
var selectedParameter = plotData[i].label

for (k = 0; k < visiblePoints.length; k++) {
// Convert visiblePoint first value from ms to date
var timestamp = new Date(visiblePoints[k][0])

// Form the thisRow object that will go into dataArray
// for each loop of visiblePoints
var thisRow = {}
thisRow["Time"] = msToTime(timestamp)
thisRow[selectedParameter] = visiblePoints[k][1]
dataArray.push(thisRow)
}
}

让我们简化一下,对于每个 plotData 数组,我在子数组 visisblePoints 中只有 2 个元素,像这样(每个 plotData 数组可以有许多 visiblePoints 但我简化为每个只有 2 个):

plotData[0].visiblePoints = [[00:00:01, 1], [00:00:02, 4] ...]
plotData[1].visiblePoints = [[00:00:01, 27], [00:00:02, 31] ...]

plotData 在控制台上看起来像这样:

enter image description here

k 循环的 visiblePoints 数组派生自 plotData.datapoints,如下所示:

enter image description here

其中 visiblePoints[n][0] 是以毫秒为单位的值(我将其转换为秒)而 visiblePoints[n][1] 只是一个浮点值.

visiblePoints = 
[0, 0.0500466109191]
[100, 0.0548114598135]
[200, 0.0550143573252]
[300, 0.0549408536766]
[400, 0.0546117305419]
[... repeat 300+ times...]

在遍历 plotData[i]visiblePoints[k] 之后,我得到:

dataArray = [
{
"Time": 00:00:01,
"foo": 1
},
{
"Time": 00:00:01,
"bar": 27
},
{
"Time": 00:00:02,
"foo": 4
},
{
"Time": 00:00:02,
"bar": 31
},
]

当我打算结束时:

dataArray = [
{
"Time": 00:00:01,
"foo": 1,
"bar": 27
},
{
"Time": 00:00:02,
"foo": 4,
"bar": 31
}
]

我认为在循环 k 中我需要遍历 dataArray,检查那里的所有对象以查看是否有匹配的 TimethisRow["Time"] = msToTime(timestamp),如果是,则添加 thisRow[selectedParameter] = visiblePoints[k][1],如果不是,则创建一个新对象。

问题:

  1. 我不确定如何在 JS 中检查这个(我在 Python 方面更有经验,但在这方面没那么多
  2. 我好像做了很多循环。我不确定添加另一个对象来遍历整个 dataArray 并检查所有对象以查看其中一个对象中是否存在键是此处的最佳解决方案。 plotData.visiblePoints 数组的长度可以超过 500。

[编辑] 简化了问题。添加了图片示例。添加了 k 数组的文本示例。

最佳答案

您可以构建一个以分组为键的对象——在本例中为时间戳。这将使您无需搜索数组即可随机访问所需的项目。完成后,对象的 Object.values 将成为分组对象的数组:

let plotData = [
{
label: 'foo',
visiblePoints: [[`00:00:01`, 1], [`00:00:02`, 4]]
},
{
label: 'bar',
visiblePoints: [[`00:00:01`, 27], [`00:00:02`, 31]]
}
]

let groups = plotData.reduce((obj, {label, visiblePoints}) => {
visiblePoints.forEach(([time, val]) => {
if(!obj[time]) obj[time] = {Time: time} // if we haven't seen this time make a new object at that key
obj[time][label] = val
})
return obj
}, {})
console.log(Object.values(groups))

关于javascript - 检查对象是否有 key ,如果有,添加新 key : value to said object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53657153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com