第一题:
let arr = [
{ "name": "www", "time": 110 },
{ "name": "aaa", "time": 180 },
{ "name": "aaa", "time": 220 },
{ "name": "ddd", "time": 30 },
{ "name": "aaa", "time": 190 },
{ "name": "www", "time": 80 },
{ "name": "www", "time": 90 },
{ "name": "aaa", "time": 220 },
{ "name": "bbb", "time": 60 },
];
//去重数组的name并且计算相同name的次数,过滤相同name时time的最大值,输出实例:
// [
// { "name": "www", "time": 110, "count": 3 },
// { "name": "aaa", "time": 220, "count": 3 },
// { "name": "ddd", "time": 30, "count": 1 },
// { "name": "bbb", "time": 60, "count": 1 }
// ]
// start是初始值,数组
// item是arr遍历的每一个对象
function filterArr(arr) {
// 声明一个hash对象,用于检测是否遍历到重复的name值:
// 没有重复name : 设为true并向初始值数组start内插入遍历到的item且添加count为1;
// 有重复name : 则对初始值数组进行find遍历,返回符合条件的第一个对象,即过滤掉不符合条件的item;
// 重复数据的count++
// 取obj和item中time大的值为obj中time的值
let hash = {};
// reduce方法接收两个参数:function()、传递给第一个参数function的初始值;
// 上述的function 又有四个参数:start(函数的初始值。必须参数)、currentValue(当前元素或者说是遍历数组的item。必需参数)、currentIndex(当前元素的索引。不必需参数)、arr(当前元素所属的数组对象。不必需参数)
return arr.reduce((start, item) => {
if (hash[item.name]) {
// find方法,返回符合条件的第一个对象
let obj = start.find(e => e.name === item.name)
console.log(start, 'start')
obj.count++;
obj.time = Math.max(obj.time, item.time)
} else {
hash[item.name] = true;
start.push({ ...item, count: 1 })
}
return start
}, [])
}
const result = filterArr(arr)
console.log(result, '输出结果')
第二题:判断字符串是否是回文
const str = "1thht1"
function isHuiwen(str){
//将字符串反转,判断前后是否相同
let string = str.split("").reverse().join("");
return str === string
}
//或者
function isHuiwen(str){
var len = str.length;
//循环判断前后对应数字是否相同,不相同则返回false;
for(var i = 0; i < len/2; i++){
if(str[i] != str[len-i-1]){
return false
}
}
//否则返回true
return true
}