如何在数组或字符串中获得一个唯一的值?仅第一个值。仅限纯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()
函数。
答案 0 :(得分:0)
您可以使用find()
并将indexOf
与lastIndexOf
进行比较,以确定数组中的第一个唯一项目,以确定是否有一个以上的项目实例。如果需要在字符串中查找唯一字符,则可以先将其拆分为数组,然后使用相同的方法。例如:
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));