使用javascript/jquery从现有数组中创建一个新数组,该数组保存项目存在的次数
Create a new array from an existing array that holds the count for how many times an item exist using javascript/jquery
我有一个数组中的项列表,我想创建一个新数组,它是一个对象数组,键是现有数组中的值,值是该项在现有数组中出现的次数。希望从那以后,如果不希望这个例子会有所帮助的话。请不要使用像lodash或下划线这样的第三方库。
如有任何帮助,我们将不胜感激,谢谢。
var arr = [a,a,a,b,c,c,d,e,f,f,f,f];
new array =[{a:3},{b:1},{c:2},{d:1},{e:1},{f:4}];
到目前为止我的尝试:
countryCodes.sort();
var result = count(countryCodes);
console.log(result[0]+": "+result[1]);
function count(arr) {
var a = [], b = [], prev;
arr.sort();
for ( var i = 0; i < arr.length; i++ ) {
if ( arr[i] !== prev ) {
a.push(arr[i]);
b.push(1);
} else {
b[b.length-1]++;
}
prev = arr[i];
}
return [a, b];
}
你很接近。
var a = "aa",
b = "bb",
c = "cc",
d = "dd",
e = "ee",
f = "ff";
var arr = [a,a,a,b,c,c,d,e,f,f,f,f];
function getCount(arr) {
var result = {};
for (var val of arr) result[val] = result[val] + 1 || 1;
return result;
}
var totals = getCount(arr);
document.write(JSON.stringify(totals));
按下run
按钮时打开console
。
var arr = ['a', 'a', 'a', 'b', 'c', 'c', 'd', 'e', 'f', 'f', 'f', 'f'];
function getObjectFromArray(a) {
var result = [],
alreadyAdded = [];
a.forEach(function(item) {
var key = item,
obj = {};
if (alreadyAdded.indexOf(item) != -1) return;
alreadyAdded.push(item)
obj[key] = getCount(a, item)
result.push(obj)
})
return result;
}
function getCount(a, el) {
var count = 0;
a.forEach(function(element) {
if (element == el) count++
})
return count;
}
console.log(getObjectFromArray(arr))
这里是另一种工作方式。
function count(arr) {
var prev = arr[0];
var current;
var newArr = [];
var count = 0;
var obj = {};
for (var i = 0; i < arr.length; i++) {
current = arr[i];
if (i == arr.length - 1) {
if (prev == current) {
count++;
obj = {};
obj[prev] = count;
newArr.push(obj);
}
else {
obj = {};
obj[prev] = count;
newArr.push(obj);
count = 1;
obj = {};
obj[current] = count;
newArr.push(obj);
}
}
else if (prev == current) {
count++;
}
else {
obj = {};
obj[prev] = count;
newArr.push(obj);
count = 1;
prev = current;
}
}
return newArr;
}
console.log(count(['a', 'a', 'a', 'b', 'c', 'c', 'd', 'e', 'f', 'f', 'f', 'f']));
使用Array.prototype.reduce()
这可能是一项非常简单的任务
var arr = ["a","a","a","b","c","c","d","e","f","f","f","f"],
res = arr.reduce((p,c) => { var i = p.findIndex(e => !!e[c]);
!!~i ? p[i][c]++ : p.push({[c]:1});
return p},[]);
document.write("<pre>" + JSON.stringify(res) + "</pre>");
下面这个应该像o(2n)一样快,它只不过是两行对象赋值。
var arr = ["a","a","a","b","c","c","d","e","f","f","f","f"],
mid = arr.reduce((p,c) => {!!p[c] ? p[c]++ : p[c]=1; return p},{}),
res = Object.keys(mid).map(e => ({[e]:mid[e]}));
document.write("<pre>" + JSON.stringify(res) + "</pre>");
相关文章:
- csv数据中的新数组
- javascript函数,它将数组作为输入,将每个数组元素增加1,并返回增加值的新数组
- 按值名称过滤掉重复的对象,并将其放入新数组中
- 根据对多个数组唯一的元素创建一个新数组
- 使用javascript/jquery从现有数组中创建一个新数组,该数组保存项目存在的次数
- Javascript-在一个数组中搜索整个单词,并创建一个符合条件的新数组
- 使用Node中的Q promise库对值数组顺序调用/执行相同的函数;并返回带有结果的新数组/集合
- 将数组值替换为循环以创建新数组
- 带有附加元素的新数组不会可视化
- 创建新数组和清除长度之间的差异
- 如何将新数组传递给函数
- 创建新数组或增加计数器
- 将字符串数组的子字符串复制到Javascript中的新数组中
- 如何使用旧数组中的数据创建新数组
- 如何过滤/修改主干集合本身,而不是获取新数组
- 如何比较具有相同值的两个数组并将该相同值存储在新数组中
- 将现有数组的元素复制到新数组而不使用拼接
- 如何将新数组添加到另一个数组的特定对象中
- 将一个新数组放入另一个数组中
- 为什么它在创建json对象时创建数组新数组