JS-只返回特定字段的对象的过滤器数组(映射和过滤器之间的某种组合)



我有以下数组

const arr = [
{ id: 1, token: "aAdsDDwEwe43svdwe2Xua" }, 
{ id: 2, token: undefined }
];

我需要过滤掉未定义的令牌,并忽略id字段。

类似于:

const arr = [
{ id: 1, token: "aAdsDDwEwe43svdwe2Xua" },
{ id: 2, token: undefined },
];
const result = arr
.filter(({ token }) => token !== undefined)
.map(({ token }) => token);

console.log(result);

有可能在O(n(中做这件事吗?我的意思是,不用浏览列表两次。

const result = arr.reduce((acc,curr) => {
return curr.token !==undefined ? [...acc,curr.token] : acc
},[])

首先是O(n)。仅仅因为我们在一个循环上运行了两次,它就不会变成O(n^2)

此外,如果你简单地使用for循环,你会意识到它是多么简单:

const arr = [
{ id: 1, token: "aAdsDDwEwe43svdwe2Xua", extraField : "x" }, 
{ id: 2, token: undefined, extraField : "x" }
];
let ans = [];
for(let i = 0 ; i < arr.length; i++){
if(arr[i].token!== undefined){
let { id, ...newBody } = arr[i];
ans.push(newBody);
}
}
console.log(ans);

使用排列运算符(…(来删除特定属性(此处为id(。如果您正在寻找阵列方法,也可以使用.forEach()实现上述功能

最新更新