Val*_*or_ 18 javascript arrays
我需要过滤掉我的数组以仅包含唯一值.这是我的数组数据
["X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11"]
Run Code Online (Sandbox Code Playgroud)
预期的结果应该是
["X_row7", "X_row4", "X_row6", "X_row10", "X_row11", "X_row8", "X_row9"]
Run Code Online (Sandbox Code Playgroud)
我应该如何继续我的代码才能获得正确的结果.
newArray = [];
for(n in data){
if(!newArray.indexOf(n)){
newArray.push(n);
}
}
console.log(newArray);
Run Code Online (Sandbox Code Playgroud)
如果您需要任何其他信息,请告诉我,我会提供.谢谢
Moh*_*waj 54
您可以使用Array.filter函数根据回调函数的返回值过滤掉数组的元素.回调函数针对原始数组的每个元素运行.
这里回调函数的逻辑是,如果indexOf当前项的值与索引相同,则表示首次遇到该元素,因此可以将其视为唯一.如果不是,则表示已经遇到该元素,因此现在应该将其丢弃.
var arr = ["X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11"];
var filteredArray = arr.filter(function(item, pos){
return arr.indexOf(item)== pos;
});
console.log( filteredArray );Run Code Online (Sandbox Code Playgroud)
更新(2017年11月16日)
如果您可以依赖ES6功能,那么您可以使用Set object和Spread运算符从给定数组创建一个唯一数组,如下面@Travis Heeter的答案中所述:
var uniqueArray = [...new Set(array)]
Run Code Online (Sandbox Code Playgroud)
Tra*_*ter 18
截至2015年6月15日,您可以使用Set()创建一个独特的数组:
var uniqueArray = [...new Set(array)]
Run Code Online (Sandbox Code Playgroud)
对于你的例子:
var data = ["X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11"]
var newArray = [...new Set(data)]
console.log(newArray)
>> ["X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11"]
Run Code Online (Sandbox Code Playgroud)
可以使用JavaScript Set和Array.from方法来过滤包含唯一值的数组,如下所示:
Array.from(new Set(arrayOfNonUniqueValues));
Set对象使您可以存储任何类型的唯一值,无论是原始值还是对象引用。
返回值一个新的Set对象。
Array.from()方法从类似于数组或可迭代对象的对象创建一个新的Array实例。
返回值一个新的Array实例。
示例代码:
const array = ["X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11"]
const uniqueArray = Array.from(new Set(array));
console.log("uniqueArray: ", uniqueArray);Run Code Online (Sandbox Code Playgroud)
您可以使用哈希表进行查找并过滤所有未包含的值.
var data = ["X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11"],
unique = data.filter(function (a) {
return !this[a] && (this[a] = true);
}, Object.create(null));
console.log(unique);Run Code Online (Sandbox Code Playgroud)
小智 7
arr = ["I", "do", "love", "JavaScript", "and", "I", "also", "do", "love", "Java"];
uniqueArr = [... new Set(arr)];
// or
reallyUniqueArr = arr.filter((item, pos, ar) => ar.indexOf(item) === pos)
console.log(`${uniqueArr}\n${reallyUniqueArr}`)Run Code Online (Sandbox Code Playgroud)
您可以使用Map and Spread Operator:
var rawData = ["X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11"];
var unique = new Map();
rawData.forEach(d => unique.set(d, d));
var uniqueItems = [...unique.keys()];
console.log(uniqueItems);Run Code Online (Sandbox Code Playgroud)
Array.prototype.unique = function () {
return [...new Set(this)]
}
Run Code Online (Sandbox Code Playgroud)
然后我们可以写:
const arr = [1, 5, 2, 2, 2, 3, 4, 3, 2, 1, 5]
const uniqueArr = arr.unique()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69404 次 |
| 最近记录: |