【问题标题】:How to fetch unique values from the given array in javascript [closed]如何在javascript中从给定数组中获取唯一值[关闭]
【发布时间】:2019-07-28 17:25:51
【问题描述】:

我想从 javascript 中的数组中获取所有唯一值,同时忽略字符串的大小写。

预期输出:

let array = ["pune", "Pune", "PUNE", "पुणे", "400321", "पुणे", "400321"];

// wanted output:
// array == ["pune", "400321", "पुणे"]
console.log(array);

我需要做什么才能得到这个结果?

【问题讨论】:

  • 你的意思是唯一的值(不区分大小写)吗?
  • 在最终输出中,您希望值的大小写与第一次出现相同还是应该小写?
  • 我只想要其中三个中的一个值,就像 pune 一样
  • @ashwini 所以给定["pUNe", "PuNe"] 作为输入,您希望结果是["pUNe"](第一个元素)还是["PuNe"](最后一个元素)或["pune"](小写)或@987654326 @(大写)作为输出?

标签: javascript arrays unique


【解决方案1】:

假设您想要数组中的所有唯一值(忽略值的大小写), 您可以通过使用对象对它们进行分组来做到这一点:

function uniqueValuesCaseInsensitive(values) {
  let unique = values.reduce((acc, val) => {
    let downcased = val.toLowerCase();
    if(!(downcased in acc))
      acc[downcased] = val;
    return acc;
  }, {});
  
  return Object.values(unique);
}

let array=["pune","Pune","PUNE","पुणे","400321","पुणे","400321"];
console.log(uniqueValuesCaseInsensitive(array));

正如@CodeManiac 指出的,如果您对输出值被小写没问题,您也可以使用它:

let array=["pune","Pune","PUNE","पुणे","400321","पुणे","400321"];
console.log([...new Set(array.map(v=> v.toLowerCase()))]);

使用像 lodash 这样的库,这会变得更短:

let array=["pune","Pune","PUNE","पुणे","400321","पुणे","400321"];

console.log(_.uniqBy(array, e => e.toString().toLowerCase()));
<script src="https://unpkg.com/lodash@4.17.15/lodash.min.js"></script>

【讨论】:

  • 替代方案是[...new Set(inp.map(v=> v.toLowerCase()))]
  • @CodeManiac 但是您不保留第一个元素的大小写(即所有元素都将小写)。我添加了答案,这是一个很好的解决方案 :) 感谢您指出这一点 :)
  • 是的,但从给定的例子看来,我只是在comment 中要求 OP 对此进行更多澄清
【解决方案2】:

您可以将所有字符串转换为小写并将数组转换为Set 以删除重复项。然后使用扩展语法将集合转换回Array

const arr = ['pune','Pune','PUNE','पुणे',400321,'पुणे',400321];
const uniq = [...new Set(arr.map(x => x.toLowerCase && x.toLowerCase() || x))]

console.log(uniq)

【讨论】:

    猜你喜欢
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多