这是一个非常简单的问题,但我无法把我的头脑围绕在这上面。我有一个有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我做错了什么?
发布于 2018-04-17 18:43:20
请为索引使用带有变量的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"`.发布于 2018-04-17 18:44:32
您应该使用.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);
发布于 2018-04-17 18:55:17
我会存储您想要消除的值,然后在所有页面名的列表上运行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);https://stackoverflow.com/questions/49885324
复制相似问题