【问题标题】:JavaScript - Filtering an index of an array with .includes()JavaScript - 使用 .includes() 过滤数组的索引
【发布时间】:2020-07-14 09:34:03
【问题描述】:

我正在尝试过滤掉数组 data 并让我的返回是 newData 过滤掉包含标题“旅游”的索引

我正在使用.filter 方法并使用.includes,但这样做时 newData 返回值包括“Tourism”,即使我检查返回不包括此的所有值。

这是我正在使用的代码示例:

let data = [ { title: "Vacation", revenue: 23421 }, { title: "Hospitals", revenue: 34212 }, { title: "Tourism", revenue: 42124 }, {title: "International Tourism", revenue: 87321 } ]


newData = data.filter(function (item) {
  return !item.title.includes('Tourism') || item.title.includes('Vacation')
})

console.log(newData)

我希望返回值不包括 "Tourism" and "International Tourism" 基于 .includes 返回不包括“旅游”的所有内容。我是否以正确的方式处理这种情况?无论我的.includes 检查如何,我的当前值都返回数组中的所有内容

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    includes 是一个方法,所以它是一个接受参数的函数,特别是在调用它的字符串或数组中检查的值。请改用.includes(value)

    let data = [{
      title: "Vacation",
      revenue: 23421
    }, {
      title: "Hospitals",
      revenue: 34212
    }, {
      title: "Tourism",
      revenue: 42124
    }, {
      title: "International Tourism",
      revenue: 87321
    }];
    
    newData = data.filter(
      item => !item.title.includes('Tourism')
    );
    
    console.log(newData);

    对于您的编辑,如果您想过滤掉多个值,您可以使用几种方式来表达相同的意思。考虑!includesTitle() && !includesVacation()(“不包括标题,不包括假期”)和!(includesTitle() || includesVacation)(“不包括标题或位置”),它们在语义上是等效的:

    let data = [ { title: "Vacation", revenue: 23421 }, { title: "Hospitals", revenue: 34212 }, { title: "Tourism", revenue: 42124 }, {title: "International Tourism", revenue: 87321 } ];
    
    // filter for items where item doesn't include 'tourism' or 'vacation'
    newData = data.filter(
      // using ! to exclude any that match:
      item => !(
        // Tourism, OR
        item.title.includes('Tourism') ||
        // Vacation
        item.title.includes('Vacation')
      )
    );
    
    console.log(newData);

    【讨论】:

    • 这是我所期待的,谢谢!时间限制结束后将接受您的回答。
    • 不用担心。为了详细说明发生了什么,您基本上是在检查 String.includes == 'Tourism' 是否永远不会为真(或在您的情况下为假,因为它被否定了,所以它总是返回真)。 console.log(item.title.includes) 将打印类似 function() { [native code] } 的内容,因为您将引用方法 String.prototype.include 本身。只是为了所有血腥的细节。
    • 我很欣赏这些细节。在检查多个条件的情况下,例如消除 'Tourism' 和`'Vacation' 在您提供的代码中添加 || 会返回原始 data 数组。我是否以错误的方式接近下一步?
    • @maimok 我实际上在我的一个编辑中搞砸了,我让它过滤 for 标题中带有“旅游”的项目。添加! 反转它。如果您编辑您的问题并标记我,我将编辑我的答案并扩展用例。如果您想排除任何包含“旅游”或“国际”的内容,请使用 item => !(item.title.includes('Tourism') || item.title.includes('Vacation'))
    • 感谢您的帮助,我编辑了上面的代码 sn-p 以在扩展您提供的文本时包含"Tourism""Vacation",它不会过滤掉第二部分@987654339 @ 添加!item.title.includes('Vacation') 时,它会返回包含Tourism 和Vacation 的原始数组。这就是我目前卡在的地方
    猜你喜欢
    • 1970-01-01
    • 2020-01-04
    • 2022-01-15
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    相关资源
    最近更新 更多