使用OR运算符取消数组中的值

时间:2018-04-17 18:42:04

标签: javascript arrays

这是一个非常简单的问题,但我无法绕过它。 我有一个页面数组有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

我做错了什么?

3 个答案:

答案 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条件,以防您需要过滤更多值。

&#13;
&#13;
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;
&#13;
&#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);