前几天做了美的集团的笔试题,因为时间很紧凑,笔试完后有另外一场面试,心里本就有些紧张,然后在做算法题的过程中,输入输出格式直接使我崩溃!!我曾一度怀疑他们的环境,也在其他平台看见了另外一些笔试者和我有同样的心境。今天发现了问题的解决办法,特此记录,也分享给有需要的前端er。
问题描述
所有的输入输出格式均为字符串,如下。
第一题:数组扁平化
输入示例:
[["a"],["b"],["c",["d",["e"]]],"f"] //字符串
输出示例:
["a","b","c","d","e","f"] //字符串
扁平化的思路:
function flatten(arr) { // arr此时期待为数组格式 [["a"],["b"],["c",["d",["e"]]],"f"]
let res = []
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
res = res.concat(flatten(arr[i]))
} else {
res.push(arr[i])
}
}
return res
}
console.log(flatten(arr)); // 输出为数组格式 ['a', 'b', 'c', 'd', 'e', 'f']
可以发现正常扁平化处理的数组和结果数组的格式与示例给我们的都不一样:
- 如何使字符串格式的
[["a"],["b"],["c",["d",["e"]]],"f"]
转换为数组格式? - 如何使输出数组格式
['a', 'b', 'c', 'd', 'e', 'f']
转换为["a","b","c","d","e","f"]
字符串?
当时的我脑袋瓦特了?直接卡在了第一个问题,其实只需要 JSON.parse()
就可以实现,第二个问题JSON.stringify
就可以实现。
另辟蹊径:其实这个题目也并不是一定要把输入从字符串格式转换为数组格式,可以使用 replace(/(\[|\])/g,'')
替换掉所有[
和]
最后在在左右两边分别拼接一个[
和]
。
第二题:按属性值排序
按照 "age"
从小到大的顺序,输出"name"。
输入示例:(字符串格式)
[{"name": "Lilei","age": 13 }, {"name": "Wanggong","age": 11}, { "name": "Linhua","age": 15}, { "name": "Xipeng","age": 23}, { "name": "Liujian","age": 12}]
示例输出:
["Wanggong","Liujian","Lilei","Linhua","Xipeng"] // 字符串格式
排序是个很简单的事,但看见输入的一瞬间,我已经放弃,现在回头再看的时候:这 ** 还是一个JSON.parse()
的事啊!!
input = JSON.parse(input)
let res = []
input.sort((a, b) => {
return a.age - b.age
})
for (let i = 0; i < input.length; i++) {
res.push(input[i].name)
}
console.log(JSON.stringify(res));
第三题:地区数据处理
都说到这儿了,第三题也一起提一嘴吧,题目要求:去除地区名中的“省”。
示例输入:
["广东省", "广西", "湖北省", "湖南省", "北京", "吉林省"] //字符串格式
示例输出:
["广东","广西","湖北","湖南","北京","吉林"] //字符串格式
这个题其实是没有必要转换的,直接一个 replace(/省/, '')
解决。
写下这个题主要是为了记录自己的愚昧,当时写的去除“省”代码如下:
for (let i = 0; i < input.length; i++) {
let index = input[i].indexOf('省')
if (index !== -1) {
input[i] = input[i].slice(0, index)
}
}
console.log(input)
最后为了让数组 ['广东', '广西', '湖北', '湖南', '北京', '吉林']
转为 ["广东","广西","湖北","湖南","北京","吉林"]
字符串,进行了一系列替换、拼接。愚蠢的人类。
总结:
数组: ['广东', '广西', '湖北', '湖南', '北京', '吉林']
;
数组.toString()
: 广东,广西,湖北,湖南,北京,吉林
; // 字符串格式
JSON.stringify(数组)
:["广东","广西","湖北","湖南","北京","吉林"]
// 字符串格式;
JSON.parse()
:
- 处理数组:字符串格式:
["广东","广西","湖北","湖南","北京","吉林"]
,目标格式:数组; - 处理对象:字符串格式:
[{"name": "Lilei","age": 13 }, {"name": "Wanggong","age": 11}]
,目标格式:对象。