[英]Return array of strings and numbers from parsed object
尝试创建一个函数以从字符串,数字和布尔数组中删除重复项,方法是将数组值作为键添加到对象,然后将键推入结果数组。 我知道我可以使用回调和“ .filer” /“ .indexOf”更快,更干净地编写它,但是我正在尝试不编写它。
const removeDuplicates = (arr) => {
let result = [];
let obj = {};
for(let i = 0; i < arr.length; i++) {
obj[arr[i]] = "";
}
for(key in obj) {
if(typeof key === 'number'){
result.push(parseInt(key));
}else{
result.push(key);
}
}
return result;
}
const myArr = [1,2,2,"hello","hello",3,3,"goodbye","goodbye",4,4,4,true,true,5,5];
console.log(removeDuplicates(myArr));
该函数返回:
["1", "2", "3", "4", "5", "hello", "goodbye", "true"]
我期望:
[1, 2, 3, 4, 5, "hello", "goodbye", "true"];
不知道为什么我的“ parseInt”不起作用。 我怀疑这与我使用“ typeOf”有关。 或者,当我向对象添加数组值时,它们将以字符串形式保存在对象键中。 任何帮助表示赞赏。
const myArr = [1,2,2,"hello","hello",3,3,"goodbye","goodbye",4,4,4,true,true,5,5];
let obj = {}
const newArr = myArr.reduce((arr, item) => {
if(!object.hasOwnProperty(item)){
object[item] = 0;
arr.push(item);
}
return arr;
}, []);
console.log(newArr) //[1, 2, "hello", 3, "goodbye", 4, true, 5];
如果订单很重要,您可以return arr.sort()
您检查对象的键,该键始终是字符串,检查不起作用,但是您可以将值转换为数字,然后转换回字符串,然后使用键对其进行检查。 如果为true
,则您有一个数值。
const removeDuplicates = (arr) => { let result = []; let obj = {}; for (let i = 0; i < arr.length; i++) { obj[arr[i]] = ""; } for (key in obj) { if ((+key).toString() === key) { result.push(+key); } else { result.push(key); } } return result; } const myArr = [1, 2, 2, "hello", "hello", 3, 3, "goodbye", "goodbye", 4, 4, 4, true, true, 5, 5]; console.log(removeDuplicates(myArr));
仅出于记录目的,您可以使用Set
,它可以提供独特的结果。
const array = [1, 2, 2, "hello", "hello", 3, 3, "goodbye", "goodbye", 4, 4, 4, true, true, 5, 5], unique = [...new Set(array)]; console.log(unique); // in order of appearance
首先,这个条件if(typeof key === 'number')
永远不会被满足,它们都是string
类型。
第二,而不是写整个块
for(key in obj) {
if(typeof key === 'number'){
result.push(parseInt(key));
}else{
result.push(key);
}
}
return result;
您可以只返回Object.keys(obj)
。
现在,只要您想检查字符串与数字的位置,就可以执行(+index).toString() === index)
它可以正常工作:
const removeDuplicates = (arr) => {
let result = [];
let s = new Set()
for (key in arr)
{
if (!s.has(arr[key])) {
result.push(arr[key])
s.add(arr[key])
}
}
return result;
}
您可以使用内置于对象Set
JavaScript来保留任何类型的唯一值。 这是代码的外观。
function removeDuplicates(arr){
let result = Array.from(new Set(arr))
return result;
}
const arr = [1,2,2,"hello","hello",3,3,"goodbye","goodbye",4,4,4,true,true,5,5];
console.log(removeDuplicates(arr));
这将为您带来预期的结果。 让我知道它是否有效。 :)
const removeDuplicates = (arr) => {
let result = [];
let obj = {};
for(let i = 0; i < arr.length; i++) {
obj[arr[i]] = "";
}
for(key in obj) {
if(isNaN(+key)){
result.push(key);
}else{
result.push(+key);
}
}
return result;
}
const myArr = [1,2,2,"hello","hello",3,3,"goodbye","goodbye",4,4,4,true,true,5,5];
console.log(removeDuplicates(myArr));
typeOf“ 2”将返回字符串,而不是数字,这就是代码无法正常工作的原因。您需要尝试将其解析为int,然后再决定。 希望这可以帮助!!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.