【问题标题】:Remove single array from a 2D array based on condition根据条件从二维数组中删除单个数组
【发布时间】:2021-03-16 20:28:57
【问题描述】:

我有这个数组 const args = [[ 64, 120 ],[ 65, 100 ],[ 70, 150 ],[ 56, 90 ],[ 75, 190 ],[ 60, 95 ],[ 68, 110 ]]

我已经写了下面的代码

function sortNums(a, b) {
    if (a[0] !== b[0]) {
        return a[0] - b[0];
    } else {
        return b[1] - a[1];
    }
}


function longestPossible(nums) {

    let res = nums.map(x => +x);

    let val = [];
    for (let i = 0; i < res.length; i += 2) {
        val.push([res[i], res[i + 1]]);
    }

    val.sort(sortNums);

    let finalRes = [];
    for (i = 0; i < val.length; i++) {
        finalRes.splice(val[i][1], 0, val[i]);
    }
}

我想对上面的数组进行排序,使其变为;

[[ 56, 90 ],[ 60, 95 ],[ 65, 100 ],[68, 110 ],[ 70, 150 ],[ 75, 190 ]] 但我目前有[[ 56, 90 ],[ 60, 95 ],[ 64, 120 ],[ 65, 100 ],[68, 110 ],[ 70, 150 ],[ 75, 190 ]]

排序条件是56, 60, 65按升序排列,而120在95到100之间,导致90, 95, 120, 100的顺序与我目前的顺序不同

排序后如何删​​除数组[ 64, 120 ]

【问题讨论】:

  • 移除元素的条件是什么?为什么要删除[64, 120]
  • 条件似乎是数组的两个“边”都按升序排列,如果一个元素不可能适合所述模式,则将其删除。
  • @iota 我已经更新了这个问题,因为我最初忘记添加它。如果现在更好,请告诉我。谢谢

标签: javascript arrays sorting multidimensional-array


【解决方案1】:

您可以使用Array#filter

let args = [[ 64, 120 ],[ 65, 100 ],[ 70, 150 ],[ 56, 90 ],[ 75, 190 ],[ 60, 95 ],[ 68, 110 ]];
args = args.sort((a,b)=>a[0] != b[0] ? a[0] - b[0] : b[1] - a[1])
  .filter((x, i)=>i === args.length - 1 || x[1] <= args[i+1][1]);
console.log(JSON.stringify(args));

【讨论】:

  • 非常感谢@iota。但是有一个问题,为什么在没有 JSON.stringify 的情况下记录数组时 JSON.stringify 仍然有效?
  • 没问题。使用 JSON.stringify 在 Stack Snippets 中显示更紧凑。这不是一个重要的细节。
  • 您介意解释一下代码中发生了什么吗?我以为我会得到它...
  • @camelCase 排序后,我们使用filter 来查找要保留的项目。我们只保留第二个元素小于或等于排序数组中下一个元素的第二个元素的元素。我们还需要添加一个条件来保留最后一个项目,因为它后面没有项目。
【解决方案2】:

您可以迭代并查找/删除不需要的项目。

const
    args = [[64, 120], [65, 100], [70, 150], [56, 90], [75, 190], [60, 95], [68, 110]];

args.sort((a, b) => a[0] - b[0] || b[1] - a[1]);
console.log(JSON.stringify(args));

let i = 0;
while (i < args.length - 1) {
    if (args[i][1] > args[i + 1][1]) {
        args.splice(i, 1);
        continue;
    }
    i++;
}

console.log(JSON.stringify(args));

【讨论】:

  • 感谢@Nina Scholz。随时救援
猜你喜欢
  • 2012-01-21
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多