比较两个对象并提取javascript中具有相同Key的那些对象

时间:2017-10-17 14:55:59

标签: javascript arrays node.js object javascript-objects

我有以下两个对象

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循环来实现它,但我猜这很慢

2 个答案:

答案 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#assignspread 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);