面试之JSON数组

95 阅读2分钟

面试之JSON数组

使用filter处理json数组

我们可以使用JSON.parse()方法将其转换为JavaScript数组,然后使用filter()方法筛选出所有可用的出租车:

const taxiArray = '[{"make": "Toyota", "model": "Camry", "year": 2019, "available": true}, {"make": "Honda", "model": "Civic", "year": 2020, "available": false}, {"make": "Ford", "model": "Escape", "year": 2021, "available": true}]';

const taxis = JSON.parse(taxiArray);
const availableTaxis = taxis.filter((taxi) => taxi.available);
console.log(availableTaxis); // [{"make": "Toyota", "model": "Camry", "year": 2019, "available": true}, {"make": "Ford", "model": "Escape", "year": 2021, "available": true}]

在上面的例子中,我们使用了一个箭头函数(taxi) => taxi.available作为filter()方法的参数,该函数返回true表示出租车可用,返回false表示出租车不可用。

需要注意的是,filter()方法返回一个新的数组,不会改变原数组。

使用map处理json数组

我们可以使用JSON.parse()方法将其转换为JavaScript数组,然后使用map()方法对其中的每个元素进行操作,例如提取每个对象的姓名:

const jsonArray = '[{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}, {"name": "Charlie", "age": 35}]';

const arr = JSON.parse(jsonArray);
const names = arr.map((obj) => obj.name);
console.log(names); // ["Alice", "Bob", "Charlie"]

类似地,可以使用map()方法对JSON数组中的元素进行各种操作,例如筛选、排序、组合等等。需要注意的是,map()方法返回一个新的数组,不会改变原数组。

使用reduce进行求和

我们可以使用JSON.parse()方法将其转换为JavaScript数组,然后使用reduce()方法对数组中的元素进行累计求和:

const numArray = '[1, 2, 3, 4, 5]';
const nums = JSON.parse(numArray);
const sum = nums.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log(sum); // 15

在上面的例子中,我们使用了一个箭头函数(accumulator, currentValue) => accumulator + currentValue作为reduce()方法的参数,该函数接受两个参数,分别表示累计器和当前元素,返回累计器加上当前元素的结果。我们还在reduce()方法的第二个参数传入了初始值0,表示累计器的初始值为0。

如果reduce()方法不传递第二个参数(即累加器的初始值),则累加器的初始值将默认为数组的第一个元素,而累加器会从第二个元素开始累加。

需要注意的是,如果JSON数组是空的,且在调用reduce()方法时候不指定初始值,reduce()方法将无法进行累计操作,并且会抛出一个错误。

const emptyArray = '[]';
const emptyNums = JSON.parse(emptyArray);
const sum = emptyNums.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log(sum); // 0

需要注意的是,reduce()方法返回累计后的结果,不会改变原数组。