【问题标题】:getting unique value from object using Javascript [duplicate]使用Javascript从对象中获取唯一值[重复]
【发布时间】:2021-06-02 07:56:36
【问题描述】:

我有一个像这样的对象数组

object=
[
 {
  id:`01`,
  name:`fish`,
  type:`marine`,
 }
 {
  id:`02`,
  name:`fish`,
  type:`fresh`,
 }
 {
  id:`03`,
  name:`fish`,
  type:`tank`,
 }
 {
  id:`04`,
  name:`animal`,
  type:`pet`,
 }
 {
  id:`05`,
  name:`animal`,
  type:`wild`,
 }
 {
  id:`06`,
  name:`animal`,
  type:`zoo`,
 }
 {
  id:`07`,
  name:`food`,
  type:`veg`,
 }
 {
  id:`08`,
  name:`food`,
  type:`non-veg`,
 }
]

我想以字符串格式唯一地存储它们,所以当我调用它们时,我可以轻松获取它们

  • 我尝试使用 map 函数获取价值

let object=
    [
     {
      id:`01`,
      name:`fish`,
      type:`marine`,
     },
     {
      id:`02`,
      name:`fish`,
      type:`fresh`,
     },
     {
      id:`03`,
      name:`fish`,
      type:`tank`,
     },
     {
      id:`04`,
      name:`animal`,
      type:`pet`,
     },
     {
      id:`05`,
      name:`animal`,
      type:`wild`,
     },
     {
      id:`06`,
      name:`animal`,
      type:`zoo`,
     },
     {
      id:`07`,
      name:`food`,
      type:`veg`,
     },
     {
      id:`08`,
      name:`food`,
      type:`non-veg`,
     }
    ]
    
    object.map((value)=>{
console.log(value.name)
})

所以我得到的输出为

fish
fish
fish
animal
animal
animal
food
food
  • 但我很需要它们
fish
animal
food

即使我试图将它们存储在一个变量中以获取输出

let object=
[
 {
  id:`01`,
  name:`fish`,
  type:`marine`,
 },
 {
  id:`02`,
  name:`fish`,
  type:`fresh`,
 },
 {
  id:`03`,
  name:`fish`,
  type:`tank`,
 },
 {
  id:`04`,
  name:`animal`,
  type:`pet`,
 },
 {
  id:`05`,
  name:`animal`,
  type:`wild`,
 },
 {
  id:`06`,
  name:`animal`,
  type:`zoo`,
 },
 {
  id:`07`,
  name:`food`,
  type:`veg`,
 },
 {
  id:`08`,
  name:`food`,
  type:`non-veg`,
 }
]


let gotValue= [...new Set( object.map((value)=>{
return value.name;
}))];

console.log(gotValue);

所以我得到这个值

[
"fish"
"animal"
"food"
]

但我需要字符串格式的值

expected value=
fish
animal
food

【问题讨论】:

  • 可以在map之后使用reduce函数
  • 顺便说一句,你为什么要对字符串使用反引号?使用表达式作为模板字符串是一种开销。
  • 使用上一个 sn-p 中使用 .map 和集合的代码,然后使用 .join()\n 或其他分隔符来获得字符串输出
  • "expected value=\n" + gotValue.join('\n') 应该可以解决问题。
  • 检查我编辑的答案。

标签: javascript arrays object


【解决方案1】:

const object =
[
 {
  id:"01",
  name:"fish",
  type:"marine"
 },
 {
  id:"02",
  name:"fish",
  type:"fresh"
 },
 {
  id:"03",
  name:"fish",
  type:"tank"
 },
 {
  id:"04",
  name:"animal",
  type:"pet"
 },
 {
  id:"05",
  name:"animal",
  type:"wild"
 },
 {
  id:"06",
  name:"animal",
  type:"zoo"
 },
 {
  id:"07",
  name:"food",
  type:"veg"
 },
 {
  id:"08",
  name:"food",
  type:"non-veg"
 }
];

const distinctItems = [...new Map(object.map(item => [item["name"], item.name])).values()];
console.log(distinctItems.join(' '));

你错过的是.join(' ') 这对你有用。

const distinctItems = [...new Map(object.map(item => [item["name"], item.name])).values()];

【讨论】:

  • 你想念expected value=,看我的cmets
【解决方案2】:

只需使用Setmap

const result = ["expected value=", ...new Set(object.map((o) => o.name))].join("\n");
console.log(result);

object = [{
    id: `01`,
    name: `fish`,
    type: `marine`,
  },
  {
    id: `02`,
    name: `fish`,
    type: `fresh`,
  },
  {
    id: `03`,
    name: `fish`,
    type: `tank`,
  },
  {
    id: `04`,
    name: `animal`,
    type: `pet`,
  },
  {
    id: `05`,
    name: `animal`,
    type: `wild`,
  },
  {
    id: `06`,
    name: `animal`,
    type: `zoo`,
  },
  {
    id: `07`,
    name: `food`,
    type: `veg`,
  },
  {
    id: `08`,
    name: `food`,
    type: `non-veg`,
  },
];

const result = ["expected value=", ...new Set(object.map((o) => o.name))].join("\n");
console.log(result);

【讨论】:

  • 你想念expected value= ,看我的cmets
  • @ikhvjs 已编辑和更正...
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 2023-04-07
  • 2019-01-03
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 2020-07-14
相关资源
最近更新 更多