我有以下两个对象
var productionTime= [
{Rob3: 20},
{Rob8: 100},
{Rob4: 500},
{Rob1: 100},
{Rob5: 500}
];
var Busytime= [
{Rob4: 10},
{Rob3: 200},
{Rob8: 100},
{Rob5: 200},
{Rob1: 100}
];
现在,我想在' productionTime'中划分每个项目。各自的忙碌时间'它们具有相同的密钥。 例如,productionTime.Rob3应除以BusyTime.Rob3,生产时间.Rob8应除以BusyTime.Rob8,依此类推。
如何在javascript / nodejs中使用array.find()或array.filter()执行此操作?
P.S:我知道我可以通过使用两个嵌套的forEach循环来实现它,但我猜这很慢
答案 0 :(得分:2)
您可以为每个数组使用哈希表和单个循环。
var productionTime = [{ Rob3: 20 }, { Rob8: 100 }, { Rob4: 500 }, { Rob1: 100 }, { Rob5: 500 }];
busytime = [{ Rob4: 10 }, { Rob3: 200 }, { Rob8: 100 }, { Rob5: 200 }, { Rob1: 100 }],
hash = Object.create(null);
busytime.forEach(function (o) {
var key = Object.keys(o)[0];
hash[key] = o[key];
});
productionTime.forEach(function (o) {
var key = Object.keys(o)[0];
o[key] /= hash[key];
});
console.log(productionTime);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:1)
使用Object#assign和spread syntax将两个数组转换为对象。使用Object#keys从其中一个获取密钥,然后使用Array#map迭代密钥。使用shorthand property names:
为每个密钥创建一个新对象
const productionTime = [{"Rob3":20},{"Rob8":100},{"Rob4":500},{"Rob1":100},{"Rob5":500}];
const Busytime= [{"Rob4":10},{"Rob3":200},{"Rob8":100},{"Rob5":200},{"Rob1":100}];
// create objects from both arrays
const productionTimeObj = Object.assign({}, ...productionTime);
const busytimeObj = Object.assign({}, ...Busytime);
// get the keys from one of the objects, and iterate with map
const result = Object.keys(productionTimeObj).map((key) => ({
// create a new object with the key, and the result of the division
[key]: productionTimeObj[key] / busytimeObj[key]
}));
console.log(result);