gpt4 book ai didi

javascript - 范围过滤和数组拼接

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

我有一个正在使用范围 slider 过滤的数组数组。如果特定选定参数的值在用户设置的最小值 (tMin) 和最大值 (tMax) 范围内,它会将其添加到新数组 (myNewArray) 并以我需要的方式重新格式化它。超出范围的任何内容都不会添加到这个新数组中。这部分工作得很好。

我似乎无法工作的是我有一个单独的数组 (myOtherArray),它的格式与 myArray 完全相同,但我没有重新格式化它,而是只需要删除不在其中的行范围。 myOtherArray 应具有与 myNewArray 相同的值和行数,但它们只是格式不同。我在这里做错了什么?

myArray.map(function (dataPoint, index) {
if (index > 0) {
dataPoint.map(function (value, column) {
// this first part works fine
if ( dataPoint[paramToFilter] >= tMin && dataPoint[paramToFilter] <= tMax ) {
myNewArray[column] ? myNewArray[column].push(+value) : myNewArray[column] = [+value]
}
// this is what I cannot get to work
if ( dataPoint[paramToFilter] < tMin || dataPoint[paramToFilter] > tMax ) {
myOtherArray.splice(index, 1);
}

})
}
})

谢谢!!

最佳答案

问题是 myOtherArray 的值与 myArray 中的索引不同一旦你调用myOtherArray.splice(index, 1) .

这是一个显示问题的小例子:http://jsbin.com/wipozu/1/edit?js,console

为了避免这个问题,您可以简单地“标记”那些要删除的数组项,而不是立即将其删除。当您完成所有检查后(在 myArray.map(...) 之后),您可以删除所有那些“标记”的项目。

所以不用调用 myOtherArray.splice(index, 1);您将项目替换为 undefined (或任何其他值)--> myOtherArray[index] = undefined;然后运行以下命令以删除所有这些 undefined项目。

for (var i = 0; i < myOtherArray.length; i++)
{
if (myOtherArray[i] === undefined)
{
myOtherArray.splice(i, 1);
// correct the index to start again on the same position because all
// followings item has moved one index to the left in the array
i--;
}
}

与之前相同的示例,但使用我的解决方案:http://jsbin.com/wipozu/2/edit?js,console

所以你的代码看起来像这样:

myArray.map(function (dataPoint, index) {
if (index > 0) {
dataPoint.map(function (value, column) {
if ( dataPoint[paramToFilter] >= tMin && dataPoint[paramToFilter] <= tMax ) {
myNewArray[column] ? myNewArray[column].push(+value) : myNewArray[column] = [+value]
}

if ( dataPoint[paramToFilter] < tMin || dataPoint[paramToFilter] > tMax ) {
myOtherArray[index] = undefined; // should be removed afterwards
}

})
}
})

// remove all items that have been marked
for (var i = 0; i < myOtherArray.length; i++)
{
if (myOtherArray[i] === undefined)
{
myOtherArray.splice(i, 1);
// correct the index to start again on the same position because all
// followings item has moved one index to the left in the array
i--;
}
}

关于javascript - 范围过滤和数组拼接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26819150/

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