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