过滤数组混乱

Filtering array confusion

我有两个数组。第一个数组包含一堆值,而第二个是空的。我有一个搜索功能,可以检查并查看该值是否在第一个数组中,如果它保留在数组中。但是,如果该值不在数组中,则需要将其取出并放入第二个数组中,直到他们清除搜索然后全部返回到原始数组中。

假设 array1 = [0, 1]; 让我们说 array2 = [];

我遇到的问题是在搜索之后,如果我过滤掉 1,它会正确删除,但如果我过滤掉 0,它就不会正确删除。

例如:

          `for (i=0; i<(array1.length); i++){
             if (0 !== array1[i]){
                array2.push(array1[i]);
                array1.splice(i, 1);
            }
          }`

如果我在搜索 array1 =[1] 和 array2 = [0] 中键入 1,它应该可以工作 但是,如果我在搜索中键入 0 array1 = [0,1] and array2=[] 并且它不起作用。

知道为什么这不像我想象的那样工作吗?

const search = val => {
    for (i=0; i<(array1.length); i++) {
        if (val === array1[i]) {
            array2.push(array1[i]);
            array1.splice(i, 1);
        }
    }
}

我认为,如果您更改搜索条件,应该可以正常工作。

测试了以下场景
案例 1:let array1 = [0,1]; let array2 = []; search(0)
案例 2:array1 = [0,1]; array2 = []; search(1)

如果您只是想从一个数组中删除某些内容并将其放入另一个数组,您可以使用两个过滤器来简化代码。

let array1 = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
let array2 = [ ];

document.querySelector('button').addEventListener('click', event => {
  const searchvalue = event.target.previousElementSibling.value;
  
  // The actual work:
  array2 = array1.filter(i => i == searchvalue);
  array1 = array1.filter(i => i != searchvalue);
  
  console.log(array1, array2);
});
<input type="number" min="1" max="10" step="1" value="5"/>
<button>Search</button>