【问题标题】:Function with array and object具有数组和对象的函数
【发布时间】:2021-11-12 16:21:20
【问题描述】:

我有一个数组和一个对象,我想要一个函数 samePrice(arr,obj),如下所示:

const arr = [0,1,2];
const obj = {
    0: 10,
    1: 10,
    2: 10,
    3: 12,
};

// samePrice(arr,obj) => true

const arr = [0,3];
const obj = {
    0: 10,
    1: 10,
    2: 10,
    3: 12,
};

// samePrice(arr,obj) => false

这是我目前的功能...

const samePrice = (arr,obj) => {
    let result = true;
  let it = obj[arr[0]];
  arr.forEach(item => {
    if (obj[item] !== it){
      result = false;
    }
  })  
  return result;
}

我相信有更好的解决方案。

【问题讨论】:

  • (arr, obj) => false; 只需要一行...函数实际上应该做什么?
  • 该函数将数组的值与对象的索引进行比较,如果数组对应的对象的所有值都相等则返回true@Teemu
  • “我有一个使用 forEach 的解决方案,但函数长度超过 10 行” - 你应该发布该代码,即使只是作为努力的证明(甚至可以在折叠的 sn-p 中)。事实上,这个问题与只是为他们完成作业的人没有区别。
  • 我明白,但那是因为我对自己的 JavaScript 技能并不感到自豪,哈哈。我用我拥有的功能编辑了我的问题。 @ASDFGerte

标签: javascript arrays object


【解决方案1】:

基本上,您所做的是检查 every 元素是否与第一个元素相同:

const samePrice = (arr,obj) => arr.every(x => obj[x] == obj[arr[0]])

const arr = [0,1,2];
const obj = {
    0: 10,
    1: 10,
    2: 10,
    3: 12,
};

console.log(samePrice(arr,obj)); // => true

const arr2 = [0,3];
const obj2 = {
    0: 10,
    1: 10,
    2: 10,
    3: 12,
};

console.log(samePrice(arr2,obj2)); // => false

【讨论】:

    【解决方案2】:

    您可以使用Array.every 来测试所有数组元素是否为真。所以获取第一个数组元素的对象值,然后测试每个元素是否都相等。

    function samePrice(items, prices) {
      if (items.length == 0) {
        return true;
      }
      let price = prices[items[0]];
      return items.every(item => prices[item] == price);
    }
    
    const arr1 = [0, 1, 2];
    const obj1 = {
      0: 10,
      1: 10,
      2: 10,
      3: 12,
    };
    
    console.log(samePrice(arr1, obj1));
    
    const arr2 = [0, 3];
    const obj2 = {
      0: 10,
      1: 10,
      2: 10,
      3: 12,
    };
    
    console.log(samePrice(arr2, obj2));

    【讨论】:

      【解决方案3】:

      我想出了这个:

      function samePrice(arr, obj) {
        if(arr.length < 1)
          return false;
        i = 1;
        while(i < arr.length) {
          if(obj[arr[i]]!=obj[arr[i-1]])
            return false;
          i++;
        };
        return true;
      }
      
      var arr = [0,1,2];
      var obj = {
          0: 10,
          1: 10,
          2: 10,
          3: 12,
      };
      
      console.log(samePrice(arr, obj));
      
      var arr = [0,3];
      var obj = {
          0: 10,
          1: 10,
          2: 10,
          3: 12,
      };
      
      console.log(samePrice(arr, obj));

      【讨论】:

        【解决方案4】:

        您可以将第一个项目与引用过程分开,然后对照它检查数组的其余部分。

        const
            samePrice = ([ref, ...a], prices) => a.every(k => prices[ref] === prices[k]);
        
        console.log(samePrice([0, 1, 2], { 0: 10, 1: 10, 2: 10, 3: 12 })); //  true
        console.log(samePrice([0, 3], { 0: 10, 1: 10, 2: 10, 3: 12 })); //    false

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-09-24
          • 1970-01-01
          • 2020-04-13
          • 1970-01-01
          • 2020-10-11
          • 2017-09-13
          • 1970-01-01
          相关资源
          最近更新 更多