根据true标志比较javascript中的两个对象

时间:2019-07-15 08:58:35

标签: javascript

我有一个这样的物体

const values = [
{firstValue: "Michael", secondValue: "Malkovich"},
{firstValue: "John", secondValue: "Doe"},
{firstValue: "James", secondValue: "Doe"}
];

还有另一个这样的对象

const incomingValues = {
Michael: true;
John: false;
James: true;
};

基于这两个对象,我需要制作另一个将基于 true false 过滤值的对象,而我的最终对象必须是这样的

const filteredValues = [
    {firstValue: "Michael", secondValue: "Malkovich"},
    {firstValue: "James", secondValue: "Doe"}
];

您看到不再有John,因为它是错误的。我什至不知道如何比较这两个值。

6 个答案:

答案 0 :(得分:0)

您可以使用Array对象中的filter函数:

const filteredValues = values.filter(({ firstValue }) => incomingValues[firstValue]);

答案 1 :(得分:0)

尝试:

filteredValues = values.filter(item => {
    return incomingValues[item.firstValue] === true;
});

答案 2 :(得分:0)

最佳答案在这里

Object.keys(incomingValues).filter(y=>incomingValues[y]).map(i=>values.find(u=>i==u.firstValue))

答案 3 :(得分:0)

按如下所示使用Array.prototype.filter() -

const filteredValues = values.filter(e => incomingValues[e.firstValue]);

答案 4 :(得分:0)

您可以为此使用ES6箭头功能。首先,您需要找到所有具有真实价值的钥匙。为此,您可以使用下面提到的代码。

const keys = Object.keys(incomingValues).filter(key => incomingValues[key]);

现在,第二步是过滤掉先前获得的基本键上的values数组。为此,您可以使用下面提到的代码。

const result =  values.filter(value => keys2.indexOf(value.firstValue) >= 0 )

答案 5 :(得分:0)

尝试以下任一方法

let filteredValues = values.filter(value => {
return incomingValues[value.firstValue];
});

let fileredTypeTwo = values.filter(function (value) {
return incomingValues[value.firstValue];
});