从使用lodash创建的对象数组获取uniq值

时间:2020-07-13 06:43:32

标签: javascript reactjs lodash

我是反应新手,在这里,我试图从新创建的对象数组中获取唯一元素。

const data = _.uniq(
  orderData?.Sessions.map(session => ({
    label: `${session.Activity.Name}`,
    value: `${session.Activity.Name}`
  }))
);

我已经尝试过了,但是仍然使用两个键中的任何一个返回具有唯一元素的对象数组。

不应复制对象。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:2)

应为_.uniqBy(),请参考uniqBy

const data = _.uniqBy(
  orderData ? .Sessions.map(session => ({
    label: `${session.Activity.Name}`,
    value: `${session.Activity.Name}`
  })), 'label' or 'value'
);

应按标签或按值

示例

document.querySelector("body").onload = function() {
  // By 'label'
  console.log("By label");
  console.log(
    _.uniqBy(
      [
        {'label' : 'name', 'value' : 'Test Name 1'},
        {'label' : 'name', 'value' : 'Test Name 2'},
        {'label' : 'company', 'value' : 'Test Company 1'}
      ], 'label'
    )
  )
  // By 'vlaue'
  console.log("By value");
  console.log(
    _.uniqBy(
      [
        {'label' : 'name', 'value' : 'SO User'},
        {'label' : 'name', 'value' : 'SO User'},
        {'label' : 'company', 'value' : 'Test Company 1'}
      ], 'value'
    )
  )
}
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>

答案 1 :(得分:0)

您必须使用_.uniqBy(data, 'id');//id that is key you have to remove duplicate value from array

您的方案将像这样使用

如果被标签删除,则

const data = _.uniqBy(
  orderData ? .Sessions.map(session => ({
    label: `${session.Activity.Name}`,
    value: `${session.Activity.Name}`
  })),'label'
);

如果被删除,则

const data = _.uniqBy(
  orderData ? .Sessions.map(session => ({
    label: `${session.Activity.Name}`,
    value: `${session.Activity.Name}`
  })),'value'
); 

如果您了解更多详细信息,那么Link