【问题标题】:Search for all values in array of objects搜索对象数组中的所有值
【发布时间】:2018-08-09 11:02:18
【问题描述】:

我有三个数组。

其中一个包含我将要测试的值。另外两个是对象数组,其中可能包括我在name 键下的第一个数组的值。

const myArray = ["foo", "bar"];

const testArray1 = [
    {name: "foo"},
    {name: "bar"},
    {name: "something else"}
]

const testArray2 = [
    {name: "foo"},
    {name: "rab"},
    {name: "something else"}
]

我正在尝试编写一个条件,仅当测试数组包含我的第一个数组的所有值时才会返回 true

用同样的例子,它会给我这样的东西:

if (testArray1.containsAll(myArray)) // true
if (testArray2.containsAll(myArray)) // false

解决此问题的最佳方法是什么?

谢谢,非常感谢任何帮助

【问题讨论】:

    标签: javascript arrays object conditional-statements


    【解决方案1】:

    array.prototype.everyarray.prototype.find 应该是:

    const myArray = ["foo", "bar"];
    
    const testArray1 = [
        {name: "foo"},
        {name: "bar"},
        {name: "something else"}
    ];
    
    const testArray2 = [
        {name: "foo"},
        {name: "rab"},
        {name: "something"}
    ];
    
    console.log(myArray.every(s => testArray1.find(o => o.name === s)));
    console.log(myArray.every(s => testArray2.find(o => o.name === s)));

    【讨论】:

      【解决方案2】:

      可以使用,每个和一些。这些只返回真/假

      const myArray = ["foo", "bar"];
      
      const testArray1 = [
          {name: "foo"},
          {name: "bar"},
          {name: "something else"}
      ]
      
      const testArray2 = [
          {name: "foo"},
          {name: "rab"},
          {name: "something else"}
      ]
      
      let result1 = testArray1.every(item => myArray.some(array => item.name == array))
      let result2 = testArray2.every(item => myArray.some(array => item.name == array))
      
      console.log('result1', result1)
      console.log('result2', result2)

      【讨论】:

        【解决方案3】:

        看看这个。可能不是最好的方法,但效果很好。

        const myArray = ["foo", "bar"];
        
        const testArray1 = [
            {name: "foo"},
            {name: "bar"},
            {name: "something else"}
        ]
        
        const testArray2 = [
            {name: "foo"},
            {name: "rab"},
            {name: "something else"}
        ]
        let aFlag = testArray1.filter( a =>  myArray.includes(a.name)).length === myArray.length;
        let bFlag = testArray2.filter( a =>  myArray.includes(a.name)).length === myArray.length;
        console.log(aFlag, bFlag)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-19
          • 2015-07-24
          • 1970-01-01
          • 2021-09-03
          • 1970-01-01
          相关资源
          最近更新 更多