javascript - lodash 中是否有比较两个对象数组,如果结果相同则不会显示

标签 javascript lodash

我有两个 json 类型的数据“A”和“B”,它们都有相同的类型类别

{
"A":
    [{ 
    "id": "1",
       "vehicle": {
        "model": "toyota"
            }
    },{
    "id":"2",
         "vehicle": {
        "model": "vios"
            }
    },{
    "id":"3",
         "vehicle": {
        "model": "honda"
            }
    },{
    "id":"4",
         "vehicle": {
        "model": "eon"
            }
    },{
    "id":"5",
         "vehicle": {
        "model": "motor"
            }
     }]
}
---------------------------------------------------------
{
    "B":
        [{ 
            "model": "volkswagen"
        },{
            "model": "hyundai"
        },{
            "model": "honda"
        },{
            "model": "mitsubishi"
        },{
            "model": "bmw"
        }]
}

是否有一个 lodash 函数可以使用?如果“A”中有相同型号的车辆与“B”进行比较,则不会显示该型号

最佳答案

使用原生 Javascript,您可以使用 array#filterarray#some

这里它将获取模型数组中没有模型的汽车。

const cars = {"A":[{"id": "1","vehicle": {"model": "toyota"}},{"id":"2","vehicle": {"model": "vios"}},{"id":"3","vehicle": {"model": "honda"}},{"id":"4","vehicle": {"model": "eon"}},{"id":"5","vehicle": {"model": "motor"}}]};

const models = {"B":[{"model": "volkswagen"},{"model": "hyundai"},{"model": "honda"},{"model": "mitsubishi"},{"model": "bmw"}]};

var result = cars.A.filter((car) => {
  return !models.B.some((model) => model.model === car.vehicle.model ) 
});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

以防万一,您想要没有汽车的模型。

const cars = {"A":[{"id": "1","vehicle": {"model": "toyota"}},{"id":"2","vehicle": {"model": "vios"}},{"id":"3","vehicle": {"model": "honda"}},{"id":"4","vehicle": {"model": "eon"}},{"id":"5","vehicle": {"model": "motor"}}]};

const models = {"B":[{"model": "volkswagen"},{"model": "hyundai"},{"model": "honda"},{"model": "mitsubishi"},{"model": "bmw"}]};

var result = models.B.filter((model) => {
  return !cars.A.some((car) => model.model === car.vehicle.model ) 
});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

这是一个 lodash 解决方案:

const cars = {"A":[{"id": "1","vehicle": {"model": "toyota"}},{"id":"2","vehicle": {"model": "vios"}},{"id":"3","vehicle": {"model": "honda"}},{"id":"4","vehicle": {"model": "eon"}},{"id":"5","vehicle": {"model": "motor"}}]};

const models = {"B":[{"model": "volkswagen"},{"model": "hyundai"},{"model": "honda"},{"model": "mitsubishi"},{"model": "bmw"}]};

var result = _.filter(models.B, (model) =>
    !_.some(cars.A, (car) => model.model === car.vehicle.model));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js'></script>

关于javascript - lodash 中是否有比较两个对象数组,如果结果相同则不会显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45830324/

相关文章:

javascript - lodash map get index key 得到了意外的 token

JavaScript:如何将具有嵌套属性的对象数组分组?

javascript - Sequelize 搜索 API 无法按预期运行 expressJS

javascript - Node JS - 如何使用 URL 查询字符串?

javascript - 如何从 img alt 标签创建 <span> 元素并将其附加到 <img> 行之后

javascript - Lodash 过滤以返回对象而不是长度为 1 的数组

javascript - Lodash - 变量声明后可以继续链接吗?

javascript - 当我使用 self var 时,jsDoc Toolkit 方法、字段和属性不显示

javascript - 改变 react 中的状态

javascript - 使用 lodash 查找匹配值(如果存在)