我有一个这样的键值对数组:
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/