返回信息流1. 题目如下:
0 1 2 3 4 5 6 7 8 9
_ _ _ _ _ _ _ _ _ _
请将第二排填上数字,使得第二排每一位数字是对应的第一排数字的次数,并编码实现。
2. 实现一个 HardMan:
HardMan("jack") 输出:
I am jack
HardMan("jack").learn("computer") 输出
I am jack
Learning computer
HardMan("jack").rest(10).learn("computer") 输出
I am jack
//等待10秒
Start learning after 10 seconds
Learning computer
HardMan("jack").restFirst(5).learn("chinese") 输出
//等待5秒
Start learning after 5 seconds
I am jack
Learning chinese
这是一条镜像帖。来源:北邮人论坛 / java-script / #2340同步于 2017/6/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
JavaScript机器人发帖
两道js笔试题,求大神解答下。
findtheright
2017/6/26镜像同步22 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
第一题我是这样答的,但是错了,不知道错在哪里。
function count(arr){
var result = [];
for (var i = 0; i < arr.length; i++){
var count = 0;
var copy = arr.slice(0);
var current = arr[i];
while (copy.indexOf(current) != -1){
count ++;
copy.splice(copy.indexOf(current),1);
}
result += count + " ";
}
console.log(result);
}
```
function Lazyman(name) {
let init = () => console.log('HI! this is ' + name)
this.task = [init]
setTimeout(() => {
!(async function() {
for (let index of Array(this.task.length).keys()) {
await (this.task[index])()
}
}.bind(this))()
})
}
Lazyman.prototype = {
constructor: Lazyman,
eat(food) {
this.task.push(function() {
console.log('eat ' + food)
})
return this
},
sleep(second) {
let fn = async function() {
console.log("Wake up after " + second + "s!")
await new Promise(resolve => setTimeout(resolve, second * 1000))
}
this.task.push(fn)
return this
},
sleepFirst(second) {
let fn = async function() {
console.log("sleepFirst Wake up after " + second + "s!")
await new Promise(resolve => setTimeout(resolve, second * 1000))
}
this.task.unshift(fn)
return this
}
}
new Lazyman('kodo').sleep(3).eat('b').sleepFirst(2).sleep(4).eat('c')
```
js的对象可以直接当做java的map来做,所以其实第一题很简单
var map={};
for(var i=0;i<arr.length;i++){
if(map[arr[i]]!=null){
map[arr[i]]++
}else{
map[arr[i]]=1;
}
}
for(var i=0;i<arr.length;i++){
console.log(map[arr[i]]+" ");
}
## 第一题
```js
const arr1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 5, 4, 3, 2, 1, 2]
const arr2 = arr1.map(x => arr1.filter(y => x === y).length)
console.log(arr2.join(' '))
```
## 第二题
```js
const HardMan = (name) => {
class HardMan {
constructor (name) {
this.tasks = [this.init(name)]
setTimeout(async () => {
for (const task of this.tasks) {
await task()
}
}, 0)
}
init (name) {
return () => console.log(`I am ${name}`)
}
sleep (time) {
return () => new Promise(
resolve => setTimeout(
() => resolve(console.log(`Start learning after ${time} seconds`)),
time * 1000,
)
)
}
rest (time) {
this.tasks.push(this.sleep(time))
return this
}
restFirst (time) {
this.tasks.unshift(this.sleep(time))
return this
}
learn (sth) {
this.tasks.push(() => console.log(`Learning ${sth}`))
return this
}
}
return new HardMan(name)
}
```
【 在 dcy0701 的大作中提到: 】
: [md]
: ```
: function Lazyman(name) {
: ...................
非常感谢
【 在 stevesasuke 的大作中提到: 】
: [md]
: ## 第一题
: ```js
: ...................
非常感谢
哇。。第一题我完全理解偏了,我以为要构造10个数作为第二排数,第二排数的每个数字代表第一排数字在第二排数字里出现的次数。构造出来是6 2 1 0 0 0 1 0 0 0。即在第二排数字里出现了6个0,2个1,1个2,0个3,0个4,0个5,1个6,0个7,0个8,0个9。完全想多了[ema1]