// 源数据
// 条件:id需为数字,并根据id进行排序,输入name
const source = [
null,
{ id: 4, name: 'test1' },
{ id: {}, name: 'ssdf' },
"test",
{ id: () => { }, name: 'sf' },
{ id: '6', name: 'test3' },
{ id: 6, name: 'test4' },
{ id: 7, name: 'test7' },
{ id: 2, name: 'test2' },
{ name: 'sf' },
{},
() => { }
]
// 要求输入 ['test2','test1','test4','test7']
方法1(使用filter、sort、map):
function filterSort(data) {
let arr = data.filter(item => {
return typeof(item?.id) === 'number'
// 返回每一项存在id且id为Number类型
})
arr.sort((a, b) => a.id - b.id)
// 根据id对数据进行排序
return arr.map(item => item.name)
// 返回name组成的新数组
}
let res = filterSort(source)
console.log(res)
//输出结果:['test2','test1','test4','test7']
方法2(使用reduce、map):
function filterSort(data) {
let res = source.reduce((arr, item) => {
if (typeof(item?.id) != 'number') return arr
arr[item.id] = item.name
// 将符合条件项的id作为下标进行赋值
return arr
},[])
// 此时的输出结果为:[empty × 2, "test2", empty, "test1", empty, "test4", "test7"]
return res.filter(item => item)
// 通过filter将空值过滤掉
}
let res = filterSort(source)
console.log(res)
//输出结果如下['test2','test1','test4','test7']