这是一个非常简单的问题,但我无法绕过它。 我有一个页面数组有n个页面名称,我想运行一个循环,其中包含一些页面名称。
var arr = ["page-name", "page-name-two", 'page-3', 'some-more', 'another-page'];
for (var page in arr) {
if (arr[page] !== "page-name" || arr[page] !== "some-more") {
console.log(arr[page])
}
}
现在我想要的结果是:
page-name-two
page-3
another-page
我做错了什么?
答案 0 :(得分:3)
只需logical AND &&
代替logical OR ||
。
请使用带有变量的for
循环作为索引而不是对象的键。
来源:
var arr = ["page-name", "page-name-two", 'page-3', 'some-more', 'another-page'];
for (var i = 0; i < arr.length; i++) {
if (arr[i] !== "page-name" && arr[i] !== "some-more") {
console.log(arr[i]);
}
}
表达式
arr[i] !== "page-name" || arr[i] !== "some-more"
总是如此,因为例如
arr[i] === "page-name"
然后另一部分是true
,因为
"page-name" !== "some-more"`.
答案 1 :(得分:1)
您应该使用.filter()
过滤第一个数组中的值,然后执行您想对结果数组执行的任何操作。这样可以避免编写大量OR
/ AND
条件,以防您需要过滤更多值。
let arr1 = ["page-name", "page-name-two", 'page-3', 'some-more', 'another-page'],
arr2 = ["page-name", 'some-more'];
let result = arr1.filter(s => !arr2.includes(s));
console.log(result);
&#13;
答案 2 :(得分:0)
我会存储您要消除的值,然后在所有页面名称列表上运行Array.filter以查找匹配项。如果名称匹配,请将其从最终数组中删除。
// This can be a array of whatever strings you're looking to eliminate from the array
const valuesToFilter = ['page-name', 'some-more'];
// Your original array
const arr = ["page-name", "page-name-two", 'page-3', 'some-more', 'another-page'];
// Use Array.filter to eliminate anything that doesn't pass the filter test
const filteredArr = arr.filter(page => {
let foundMatch = false;
valuesToFilter.forEach(value => {
if (page === value) {
foundMatch = true;
}
})
if (!foundMatch) return page;
});
console.log(filteredArr);