JavaScript:创建一个返回数组频率分布的函数

时间:2019-06-30 18:10:56

标签: javascript arrays object if-statement count

我正在尝试创建一个返回数组频率分布的函数。该函数应该返回一个对象,其中键是唯一元素,值是这些元素出现的频率。

我的代码如下:

function getFrequencies(arr) {

  let obj = {}; 

  for (let i=0; i<arr.length; i++){
    let element = arr[i]; 

    console.log(element)

    // check if key exists in object already

    // if it exists, add 1 to the value
    if (obj[element] !== undefined){
      obj[element] += 1;
    }

    // if it does not exist, add 1 to setup future elements
    else {
      obj[element] === 1; 
    }
  }
  return obj
}

getFrequencies([[“ A”,“ B”,“ A”,“ A”,“ A”])

我的代码返回:{}应该返回的时间:

{ A: 4, B: 1 }

我在做什么错?

3 个答案:

答案 0 :(得分:1)

obj[element] === 1;是比较运算符,而不是赋值。

您想要obj[element] = 1;

您可以在ES6 +中更轻松地完成此操作,因为它值得:

arr.reduce((acc, item) => {
  acc[item] = (acc[item] || 0) + 1
  return acc
}, {})

答案 1 :(得分:1)

您的另一部分是平等而非分配

obj[element] === 1;

应该是

obj[element] = 1;

因此,您的代码实际上从未初始化obj上的任何键

function getFrequencies(arr) {
  let obj = {};
  for (let i = 0; i < arr.length; i++) {
    let element = arr[i];
    if (obj[element] !== undefined) {
      obj[element] += 1;
      console.log(obj, 'in if')
    }
    else {
      obj[element] === 1;
      console.log(obj, 'in else')
    }
  }
  return obj
}

console.log(getFrequencies(["A", "B", "A", "A", "A"]));

您可以简单地使用reduce

function getFrequencies(arr) {
  return arr.reduce((op, inp) => {
    op[inp] = op[inp] || 0
    op[inp]++
    return op
  },{})
}

console.log(getFrequencies(["A", "B", "A", "A", "A"]));

答案 2 :(得分:0)

在您的else块中,您应该使用严格的比较来进行简单分配,即:

obj[element] = 1; 

不是

obj[element] === 1;

请参见下面的工作示例:

function getFrequencies(arr) {

  let obj = {}; 

  for (let i=0; i<arr.length; i++){
    let element = arr[i]; 

    console.log(element)

    // check if key exists in object already

    // if it exists, add 1 to the value
    if (obj[element] !== undefined){
      obj[element] += 1;
    }

    // if it does not exist, add 1 to setup future elements
    else {
      obj[element] = 1; 
    }
  }
  return obj
}

console.log(getFrequencies(["A", "B", "A", "A", "A"]));