javascript - 使用下划线确定对象是否存在于深度嵌套的对象数组中?

标签 javascript underscore.js lodash

这种比较有点奇怪,因为我有以下格式:

首选项对象:

{ 
  models: [
   {... attributes: {} },
   {... attributes: {} },
   {... attributes: {} }
  ]
}

数据数组:

[{}, {}, {}]

我有这个对象,其中包含更多 对象数组,其键名为< em>属性

我的目标:

我的目标是使用 Underscore.JS 查看数据数组中的哪些项目不作为模型数组中的属性键的值存在。

黑客尝试:

这绝对不是我想要的编码方式,但是 localStorageLayers数据数组layerPrefs首选项Object就是上面的标签。

_.each(localStorageLayers, (localLayer) => {
    var layerWasLoaded = false;
    _.each(layerPrefs.models, (layerPref) => {
        if (_.isEqual(layerPref.attributes, localLayer)) {
            layerWasLoaded = true;
            // Don't do anything
        }
    })
    if (layerWasLoaded == false) {
        // Do stuff
    }
})

最佳答案

您可以过滤 localStorageLayers 到一个子集,其中localLayer被发现等于none(否定some)的layerPrefs.models对象与其attributes属性相比。

我不使用lodash,但result应该只包含在layerPrefs.models中没有找到相等性的localStorageLayers .

const layerPrefs = { 
  models: [
   {attributes: {foo: "foo"} },
   {attributes: {foo: "bar"} },
   {attributes: {baz: "baz"} }
  ]
};

const localStorageLayers = [
  {foo: "foo"}, {hot: "dog"}, {hot: "dog"}, {baz: "baz"}
];

const result = _.filter(localStorageLayers, localLayer => 
    !_.some(layerPrefs.models, layerPref =>
        _.isEqual(layerPref.attributes, localLayer)
    )
);

console.log(result);

// Remove duplicates
const noDupes = _.uniqBy(result, _.isEqual);

console.log(noDupes);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.5/lodash.min.js"></script>

<小时/>

您可以通过使用 !_.isEqual 执行 _.every 来反转每个 localLayer 的计算。

使用看起来更清晰的那个。

const result = _.filter(localStorageLayers, localLayer => 
    _.every(layerPrefs.models, layerPref =>
        !_.isEqual(layerPref.attributes, localLayer)
    )
);

关于javascript - 使用下划线确定对象是否存在于深度嵌套的对象数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49097700/

相关文章:

javascript - 当页面位于 iframe 中时无法使用 javascript 选择单选按钮

javascript - Meteor Collection 消除重复项

javascript - 使用 Underscore 将嵌套 JSON 展平为键控值数组

javascript - d3 转换堆积条形图

javascript - 如何在 javascript 中使用 python 变量?

javascript - 了解去抖。 thunks 和赋值返回

typescript - 使用 lodash 在 Typescript 中对项目进行分组

javascript - 你如何使用 lodash 链接函数?

javascript - 映射出 JSON 结构

javascript - javascript数组和对象有固定顺序吗?