[英]How to use get an array of indexes of another array elements that has common values in Javascript?
[英]How to get the common values in an array
例如,我有一个数据数组如下
var arrData = ["40-25",null,null,"40-25","50-48",null,"30-25","40-23","50-48","30-25",null,"50-48","40-45","40-45","40-45","40-50","40-50",null,null,null,null,null,"50-48"]
我需要在javascript中列出与下面相同的数据
var arrDataSorted = ["40-25","50-48","30-25","40-23","40-45","40-50","40-50"]
只需要复制空值的公共数据被删除。
解决此问题的最佳解决方案是什么。
您可以尝试使用Array.prototype.filter()
删除空值并使用Set
获取唯一值。 最后使用Spread syntax (...)
将集合结果转换为数组。
尝试以下方式:
var arrData = ["40-25",null,null,"40-25","50-48",null,"30-25","40-23","50-48","30-25",null,"50-48","40-45","40-45","40-45","40-50","40-50",null,null,null,null,null,"50-48"]; var arrDataSorted = [...new Set(arrData.filter(i => i))]; console.log(arrDataSorted);
您可以从一个数组创建一个集合,它会自动删除重复项:
let arrData = ["40-25",null,null,"40-25","50-48",null,"30-25","40-23","50-48","30-25",null,"50-48","40-45","40-45","40-45","40-50","40-50",null,null,null,null,null,"50-48"];
let set = new Set(arrData);
这仍然会保留空值,您可以通过delete
调用将其delete
,并使用 spread ...
运算符将其转换回数组。 最终代码将是:
let set = new Set(arrData);
set.delete(null);
let distinctArr = [...set];
如果值不为null
,则将值添加到集合中并将其转换为数组。
var arrData = ["40-25",null,null,"40-25","50-48",null,"30-25","40-23","50-48","30-25",null,"50-48","40-45","40-45","40-45","40-50","40-50",null,null,null,null,null,"50-48"]; var setData = new Set(); for(var data of arrData) { if(data) { setData.add(data); } } var arrDataSorted = [...setData]; console.log(arrDataSorted);
将此函数添加到您的代码中:
function removeCommonValues(arr) {
let result = [];
for(let i=0; i < arr.length-1; ++i) {
if(result.includes(arr[i]) === false && arr[i] !== null)
result.push(arr[i])
}
return result
}
用法:
removeCommonValues(["40-25",null,null,"40-25","50-48",null,"30-25","40-23","50-48","30-25",null,"50-48","40-45","40-45","40-45","40-50","40-50",null,null,null,null,null,"50-48"]) // Return ["40-25", "50-48", "30-25", "40-23", "40-45", "40-50"]
var arrData = ["40-25",null,null,"40-25","50-48",null,"30-25","40-23","50-48","30-25",null,"50-48","40-45","40-45","40-45","40-50","40-50",null,null,null,null,null,"50-48"]
var set = new Set();
for ( var i = 0 ; i< arrData.length;i++ ) {
if(arrData[i]!==null) {
set.add(arrData[i]);
}
}
var newArr = [...set]
您可以使用数组内置的 reducer 方法,在下一个代码中,我从一个空数组开始,我只返回不为空且不在数组中的项目。
const data = arrData.reduce((state, value) => {
if(value && !state.includes(value)) {
return [...state, value];
}
return state;
}, [])
该函数可以在一个单独的文件中,以便在多个页面之间重复使用。 然后您可以调用该函数来过滤非空的不同值。
var arrData = ["40-25",null,null,"40-25","50-48",null,"30-25","40-23","50-48","30-25",null,"50-48","40-45","40-45","40-45","40-50","40-50",null,null,null,null,null,"50-48"]; function fn(value,index,self){ return self.indexOf(value) === index && value; } console.log(arrData.filter(fn));
var arrData = ["40-25",null,null,"40-25","50-48",null,"30-25","40-23","50-48","30-25",null,"50-48","40-45","40-45","40-45","40-50","40-50",null,null,null,null,null,"50-48"] const output = []; arrData.forEach(val => { if(output.indexOf(val) === -1 && val !== null) { output.push(val); } }); console.log(output);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.