javascript - 计算大于 N 的第一个对象属性的值并创建另一个对象

标签 javascript

我有一个这样的键值对数组:

let array = [{val:21, let:'a'}, {val:18, let:'b'}, {val:35, let:'c'}, {val:25, let:'d'}];

我想遍历 val 值并动态创建另一个对象,其中键是从 10 到 59 的数字,步骤 10 和值 - 数组中大于此数字的值的数量。

所以结果应该是这样的:

10:4, 20:3, 30:1 ...

我试着做一个循环,但由于我不懂 js,所以我似乎犯了一个错误。

let dict = new Object();

//let keys = array.map(o => Object.values(o)[0]); 

for (i=10; i<=90; i+=10){
     dict.key= i;
    var count = 0;
    for (value in array){
      if (array.Object.values(o)[0] >= i) {
        dict.value[i] = count++;
    }
}
    };

我应该在循环中更改什么?
提前致谢。

最佳答案

您需要让每个 i 成为您的 dict 对象中的一个键,然后您可以引用它来获取当前出现的当前次数。此外,当遍历数组时,您应该使用 for...of 而不是 for...in 作为 for...in可以遍历不需要的属性。请参见下面的示例:

const dict = {};
const array = [{val:21, let:'a'}, {val:18, let:'b'}, {val:35, let:'c'}, {val:25, let:'d'}];

for (let i = 10; i <= 59; i += 10) {
  dict[i] = 0;
  for (obj of array) {
    if (obj.val >= i) {
      dict[i]++;
    }
  }
};

console.log(dict);

或者,您可以采用一种方法,通过使用诸如 .map().filter().reduce( ) 像这样:

const count_occurances = (arr, s, e, step) =>
  Array(Math.ceil((e - s) / step)).fill().map((p => _ => p += step)(s - step))
    .reduce((a, i) => (a[i] = arr.filter(({val}) => val >= i).length, a), {});


const array = [{val:21, let:'a'}, {val:18, let:'b'}, {val:35, let:'c'}, {val:25, let:'d'}];
console.log(count_occurances(array, 10, 59, 10));

关于javascript - 计算大于 N 的第一个对象属性的值并创建另一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57854117/

相关文章:

javascript - chrome.storage.local.get 调用时结果为 "Undefined"

javascript - javascript本身是同步的,而环境是异步的吗?

javascript - 将javascript构造函数包装到另一个函数中

javascript - 读取html文件

javascript - 将 javascript 数据发送到 Django View

javascript - JSP从后端获取对象并在JS中进行操作

javascript - 为什么 b 的值在第二次迭代后自行增加?

javascript - 如何防止ASP :Button from posting back from a jQuery click handler

javascript - FabricJs - 缩放 Canvas 以适合对象

javascript - Node.JS 回调函数未被执行