为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查数组 X 中是否存在整数对,然后从数组 Y 中删除构成对的特定值?

如何检查数组 X 中是否存在整数对,然后从数组 Y 中删除构成对的特定值?

慕哥6287543 2023-05-25 17:10:57
如何检查j, k[anything][0]array 中是否存在对,然后从 arrayroads中过滤掉形成 array 中的对的特定值?这些对可以翻转为.roadskk[anything][0], j例如,做[1, 0]和[1, 3]存在于roads?或者[0, 1]和[3, 1]。const j = 1;let k = [["0", 2],["3", 2]];const roads = [[0,1],[0,3],[1,2],[1,3]];k我写了一个块,但是当since中没有更多元素roads.length大于 时迭代时它会中断k.length。到目前为止我所拥有的。仅供参考,它坏了:for(let i = 0; i < k.length; i++) {  let pairs = ([a, b]) => a === k[i][0] && b === j || a === j && b === k[i][0];  if(roads.some(pairs)) {    k = k.filter(x => x[0] !== k[i][0])};};console.log(k)期望的结果:k = [];第二个例子:const j = 1;let k = [["0", 2],["3", 2],["5", 2]];const roads = [[0,1],[0,3],[1,2],[1,3],[5,6],[5,7]];第二个期望的结果:k = [["5", 2]];
查看完整描述

2 回答

?
萧十郎

TA贡献1815条经验 获得超12个赞

我认为这个问题令人困惑的部分是你基本上没有使用k. 你只检查对[ j, k[anything][0] ]


这k[anything][1]与过滤无关,对吗?如果是这样,请看下面的代码


const j = 1;

let k = [["0", 2],["3", 2],["5", 2]];

const roads = [[0,1],[0,3],[1,2],[1,3],[5,6],[5,7]];


// results will return the filtered array

// you can instead change `let results` to `k`

// if you want to set it directly

let results = k.filter(kPair => {

    let roadsContainPair = roads.some(roadPair => {

            // check the two cases

            // [j, kPair[0]] and [kPair[0], j]

            return (roadPair[0] === j && roadPair[1] === parseInt(kPair[0])) ||

                (roadPair[0] === parseInt(kPair[0]) && roadPair[1] === j);

        });

    

    // since we only want the pair if roads DOESN'T contain it

    // we return the negative of roadsContainPair

    // i.e. if the current "pair" is found in roads, filter it out

    return !roadsContainPair;

});


// results = [["5", 2]];


查看完整回答
反对 回复 2023-05-25
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

用于some()测试数组中的条件是否匹配。在您的情况下使用它来if查看是否有任何对在roads.


用于includes()测试一个值是否在数组中。过滤时使用它k。


const j = 1;

let k = [

  ["0", 2],

  ["3", 2]

];

let roads = [

  [0, 1],

  [0, 3],

  [1, 2],

  [1, 3]

];

let k_parsed = k.map(([x]) => parseInt(x));

if (roads.some(([rx, ry]) => k_parsed.some(kx => (rx == j && ry == kx) || (rx == kx && ry == j)))) {

  k = k.filter(([kx]) => !k_parsed.includes(parseInt(kx)));

}


console.log(k);


k = [["0", 2],["3", 2],["5", 2]];

roads = [[0,1],[0,3],[1,2],[1,3],[5,6],[5,7]];


k_parsed = k.map(([x]) => parseInt(x));

if (roads.some(([rx, ry]) => k_parsed.some(kx => (rx == j && ry == kx) || (rx == kx && ry == j)))) {

  k = k.filter(([kx]) => !k_parsed.includes(parseInt(kx)));

}


console.log(k);


查看完整回答
反对 回复 2023-05-25
  • 2 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信