查找数组或字符串中的第一个唯一值

时间:2018-10-31 20:39:56

标签: javascript arrays string filter find

如何在数组或字符串中获得一个唯一的?仅第一个值。仅限纯JS。

我的例子:

function searchValue () {
  let inputText = [1,1,4,2,2,2,3,1];
  let foundedValue;
  for (let i = 0; i < inputText.length; i++) {
    if (i === inputText.indexOf(inputText[i]) && i === inputText.lastIndexOf(inputText[i])) {
      foundedValue = inputText[i];
      break;
    } else {
      foundedValue = "not founded.";
    }
  }
  return foundedValue;
}
console.log("Search value: "+ searchValue())

答案是4。

但是,我需要一个简短的解决方案。使用find()filter()函数。

3 个答案:

答案 0 :(得分:0)

您可以使用find()并将indexOflastIndexOf进行比较,以确定数组中的第一个唯一项目,以确定是否有一个以上的项目实例。如果需要在字符串中查找唯一字符,则可以先将其拆分为数组,然后使用相同的方法。例如:

const arr = [1, 1, 4, 2, 2, 2, 3, 1];

let result = arr.find(x => arr.indexOf(x) === arr.lastIndexOf(x));
console.log(result);
// 4

const text = 'aadbbbca';

let textarr = text.split('');
let textresult = textarr.find(x => textarr.indexOf(x) === textarr.lastIndexOf(x));
console.log(textresult);
// d

根据输入的性质,在执行find()之前从数组中删除重复项可能会带来性能上的好处。您可以通过多种方式返回没有重复项的数组。例如:

// use spread operator and Set to remove duplicates
let dedup = [...new Set(arr)];
// or use filter to return only the first occurence of each item
// let dedup = arr.filter((item, index) => arr.indexOf(item) === index);

let result = dedup.find(x => arr.indexOf(x) === arr.lastIndexOf(x));

答案 1 :(得分:0)

您可以尝试一下。

const arr = [1, 1, 4, 2, 2, 2, 3, 1];
let r = {};
arr.map(a => r[a] = (r[a] || 0) +1)
var res = arr.find(a => r[a] === 1 )
console.log(res)

答案 2 :(得分:0)

您可以使用js Set()对象。 首先,您可以创建一组重复的元素。

const inputText = [1,1,4,2,2,2,3,1];

const duplicatesSet= inputText.reduce((dupSet, el) => 
    inputText.filter(arrEl => arrEl === el).length > 1 ?
      dupSet.add(el) : dupSet
, new Set());

第二,您可以使用array.find。它返回第一个重复的元素。

const firstDupElement = inputText.find(el => duplicatesSet.has(el));