循环 Javascript 数组中的对象并计算相似项
Loop objects in Javascript array and count similar items
我正在尝试遍历对象数组,并在满足特定条件时获取特定键的相似值的计数。我首先尝试在一个数组(存储)上循环,但后来意识到条件必须是动态的。他们不是现在。我进入了人力资源和食品行业,但理想情况下我想制作这些变量。所以我循环遍历 arrayC 中的值并交叉检查这些值的存储。如果我循环一次(在 arrayC 中只有一个值),它可以工作,但不仅如此,它循环太多次并给我不正确的输出。尝试计算与数据和服务相关的所有类似奖励属性。例如,所有具有数据的对象:"HR" 和服务:"Food" 将合并以反映:{data:HR, service:Food, DDR: 3}
代码:
var arrayC = ["DDM","DDR"];
var storage = [
{ data: 'CT', service: 'Food',award: 'DDM' },
{ data: 'HR', service: 'Food',award: 'DDM' },
{ data: 'HR', service: 'Food',award: 'DDR' },
{ data: 'HR', service: 'Food',award: 'DDR' },
{ data: 'HR', service: 'Food',award: 'DDR' }
];
var array1=[];
var arrayTest = [];
var jk ={};
function getIt () {
arrayC.forEach(function(key,value){
$.each(storage, function(k,x){
// console.log(v.award);
if(key==x.award&&x.data=="HR"&&x.service=="Food"){
jk[x.award] = jk.hasOwnProperty(x.award) ? arrayTest.push(x.award) : arrayTest.push(x.award),
jk.data = x.data,
jk.service = x.service
}
}); //inside each
});
//array1.push(jk);
return jk;
}
var newThing = getIt();
console.log(newThing);
//Output:
//Object {
// data: "HR",
// DDM: 1,
// DDR: 4,
// service: "Food"
//}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
您可以构建一个包含所需键数的嵌套对象。
var storage = [{ data: 'CT', service: 'Food',award: 'DDM' }, { data: 'HR', service: 'Food',award: 'DDM' }, { data: 'HR', service: 'Food',award: 'DDR' }, { data: 'HR', service: 'Food',award: 'DDR' }, { data: 'HR', service: 'Food',award: 'DDR' }],
keys = ['data', 'service', 'award'],
counts = storage.reduce(function (r, o) {
var last = o[keys[keys.length - 1]],
reference = keys
.slice(0, -1)
.reduce(function (q, k) { return q[o[k]] = q[o[k]] || {}; }, r);
reference[last] = (reference[last] || 0) + 1;
return r;
}, {});
console.log(counts);
您可以使用 reduce 和数据与服务组合字符串作为键来计数。
var storage = [
{ data: 'CT', service: 'Food', award: 'DDM' },
{ data: 'HR', service: 'Food', award: 'DDM' },
{ data: 'HR', service: 'Food', award: 'DDR' },
{ data: 'HR', service: 'Food', award: 'DDR' },
{ data: 'HR', service: 'Food', award: 'DDR' }
];
var res = storage.reduce(function (x, cur) {
let item = cur.data + cur.award
if (!x[item]) x[item] = 0;
x[item] = x[item] + 1
return x
}, {})
var results = []
for (const key in res) {
const count = res[key];
const data = key.slice(0, 2)
const service = key.slice(2)
results.push({
data: data,
service: service,
count: count
})
}
console.log(results)
我正在尝试遍历对象数组,并在满足特定条件时获取特定键的相似值的计数。我首先尝试在一个数组(存储)上循环,但后来意识到条件必须是动态的。他们不是现在。我进入了人力资源和食品行业,但理想情况下我想制作这些变量。所以我循环遍历 arrayC 中的值并交叉检查这些值的存储。如果我循环一次(在 arrayC 中只有一个值),它可以工作,但不仅如此,它循环太多次并给我不正确的输出。尝试计算与数据和服务相关的所有类似奖励属性。例如,所有具有数据的对象:"HR" 和服务:"Food" 将合并以反映:{data:HR, service:Food, DDR: 3}
代码:
var arrayC = ["DDM","DDR"];
var storage = [
{ data: 'CT', service: 'Food',award: 'DDM' },
{ data: 'HR', service: 'Food',award: 'DDM' },
{ data: 'HR', service: 'Food',award: 'DDR' },
{ data: 'HR', service: 'Food',award: 'DDR' },
{ data: 'HR', service: 'Food',award: 'DDR' }
];
var array1=[];
var arrayTest = [];
var jk ={};
function getIt () {
arrayC.forEach(function(key,value){
$.each(storage, function(k,x){
// console.log(v.award);
if(key==x.award&&x.data=="HR"&&x.service=="Food"){
jk[x.award] = jk.hasOwnProperty(x.award) ? arrayTest.push(x.award) : arrayTest.push(x.award),
jk.data = x.data,
jk.service = x.service
}
}); //inside each
});
//array1.push(jk);
return jk;
}
var newThing = getIt();
console.log(newThing);
//Output:
//Object {
// data: "HR",
// DDM: 1,
// DDR: 4,
// service: "Food"
//}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
您可以构建一个包含所需键数的嵌套对象。
var storage = [{ data: 'CT', service: 'Food',award: 'DDM' }, { data: 'HR', service: 'Food',award: 'DDM' }, { data: 'HR', service: 'Food',award: 'DDR' }, { data: 'HR', service: 'Food',award: 'DDR' }, { data: 'HR', service: 'Food',award: 'DDR' }],
keys = ['data', 'service', 'award'],
counts = storage.reduce(function (r, o) {
var last = o[keys[keys.length - 1]],
reference = keys
.slice(0, -1)
.reduce(function (q, k) { return q[o[k]] = q[o[k]] || {}; }, r);
reference[last] = (reference[last] || 0) + 1;
return r;
}, {});
console.log(counts);
您可以使用 reduce 和数据与服务组合字符串作为键来计数。
var storage = [
{ data: 'CT', service: 'Food', award: 'DDM' },
{ data: 'HR', service: 'Food', award: 'DDM' },
{ data: 'HR', service: 'Food', award: 'DDR' },
{ data: 'HR', service: 'Food', award: 'DDR' },
{ data: 'HR', service: 'Food', award: 'DDR' }
];
var res = storage.reduce(function (x, cur) {
let item = cur.data + cur.award
if (!x[item]) x[item] = 0;
x[item] = x[item] + 1
return x
}, {})
var results = []
for (const key in res) {
const count = res[key];
const data = key.slice(0, 2)
const service = key.slice(2)
results.push({
data: data,
service: service,
count: count
})
}
console.log(results)