记一次阿里在线笔试(整理规划重做)
2018-09-18
//评测题目:
题目1如图( https: //img.alicdn.com/tfs/TB12n1xbwMPMeJjy1XbXXcwxVXa-630-110.png),区域container的总宽度为100%,内部有三个 div,column1宽度是400px,column2和 column3宽度相同。请补充CSS3来实现基于以下dom结构的布局。 已知的Dom结构:
<style>
.container{
width: 100%;
display: flex;
}
.container .column:first-child{
flex: 0 0 400px;
}
.column{
flex-grow: 1;
border: 1px solid;
}
</style>
<div class="container">
<div class="column">column1</div>
<div class="column">column2</div>
<div class="column">column3</div>
</div>
题目2 使用ES6的Promise对象优化下面代码:
var fs = require('fs');
fs.readFile('sample01.txt', 'utf8', function(err, data) {
fs.readFile('sample02.txt', 'utf8', function(err, data) {
fs.readFile('sample03.txt', 'utf8', function(err, data) {});
});
});
/////////////////
(function() {
var fs = require('fs');
function readFile(name, code) {
return new Promise(function(resolve,reject) {//返回Promise
fs.readFile(name, code, function(err, data) {
if (err) {//失败
reject(err);
} else {//成功
resolve(data);
}
})
}
);
}
readFile('sample01.txt', 'utf8').then(function(data){return readFile('sample02.txt', 'utf8')})
.then(function(data){return readFile('sample03.txt', 'utf8')}).catch(function(err){})
/*var promiseList = [readFile('sample01.txt', 'utf8'), readFile('sample02.txt', 'utf8'), readFile('sample03.txt', 'utf8')];
Promise.all(promiseList).then(function(data) {
//todo
}).catch(function(err){
//error
})*/
}())
题目3 有一段文本它的内容是: var text = “内容文字…”, 文本中包含部分敏感词汇, 如[“86学潮”, “萨德”, “中共”]。 请编写函数查找到这些敏感词, 并将其字体颜色更改为红色。
(function(){
/**
* blackList 黑名单列表 eg:["86学潮", "萨德", "中共"]
* text 要替换的文本 eg:"86学潮的撒打算是萨德大扫荡撒萨德的鞍山打中共的飞洒是 鞍山都是86学潮的撒打算是萨德大扫荡撒萨德的鞍山打中共的飞洒是"
* @return
*/
var replace = function(text,blackList) {
if(text&&(blackList instanceof Array)&&(blackList.length>0)){
//创建正则表达式。匹配黑名单中的词,存在或者存在多个
var reg = new RegExp("(" + blackList.join("|") + ")\1*", "g");
//进行替换,在原词组上加上红色字体标签
return text.replace(reg, function($, $1) {
return "<span style='color:red'>" + $1 + "</span>"
})
}else{
return text;
}
}
var text = "86学潮的撒打算是萨德大扫荡撒萨德的鞍山打中共的飞洒是 鞍山都是86学潮的撒打算是萨德大扫荡撒萨德的鞍山打中共的飞洒是";
var blackList = ["86学潮", "萨德", "中共"];
console.log(replace(text,blackList))
}())
题目4 给 Array 对象增加一个原型方法, 用于删除数组条目中重复的条目(可能有多个), 返回值是一个包含被删除的重复条目的新数组。
(function(){
Array.prototype.uniqueByFilter = function() {
//只取第一次出现的位置
return this.filter(function(item, index, arr) {
return index === arr.indexOf(item)
})
}
Array.prototype.uniqueBySet = function() {
//利用ES6中Set的唯一性
return Array.from(new Set(this));
}
console.log([1,2,2,3,4,4,5,6,5].uniqueByFilter());
console.log([1,2,2,3,4,4,5,6,5].uniqueBySet());
}())
题目5 实现一个函数 sort, 要求 // 输入: // { // “ng”: 100, // “react”: 200, // “vue”: 150 // } // 输出: // [ // {“name”: “ng”, “value”: 100}, // {“name”: “vue”, “value”: 150}, // {“name”: “react”, “value”: 200} // ]
(function(){
function sort(obj) {
var arr = [];
for (var name in obj) {//先将对象转数组
arr.push({
name: name,
value: obj[name]
})
}
return arr.sort(function(a, b) {//进行排序
return a.value - b.value
})
}
var obj = {
"ng": 100,
"react": 200,
"vue": 150
}
console.log(sort(obj))
}())
题目7 实现reduce方法
Array.prototype.reduce = function(fn,initValue){
var sum = initValue||0;
for(var i = 0;i<this.length;i++){
sum = fn.call(this,sum,this[i],i,this);
}
return sum;
}
题目7 找出一段字符串中最长的回文
var getMaxPalindrome = (function(){
function isPalindrome(str){//判断是否是回文
return str.length>1 && str === (str.split("").reverse()).join("");
};
function getStr(str,fn){//依次截取字符串,进行操作
for(var i =1;i<str.length+1;i++){
fn(str.substr(0,i))
}
}
function _getMaxPalindrome(str){
if(str.length<2){//如果字符串长度不足2,则不存在回文
return null;
}else if(isPalindrome(str)){//如果字符串整体直接就是回文,那就他本身肯定就是最长的回文
return str;
}
var max = "";//存放最长回文
for(var i =0;i<str.length;i++){
getStr(str.substr(i),function(_str){//获取所有字符串组合情况
if(isPalindrome(_str)&&_str.length>max.length){//判断是否为回文,并且是否大于之前最大的回文
max = _str;//如果满足条件,则最大回文为当前值
}
})
}
return max?max:null;
}
return _getMaxPalindrome;
})()
console.log(getMaxPalindrome("123321123321111333222"))