我有以下数组
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()
实现上述功能