不再让梦枯萎

文章 评论 浏览 31

不再让梦枯萎 2022-05-04 13:56:11
function roteArray(arr = [], number) {
    return arr.slice(-number).concat(arr.slice(0, - number))
}
function roteArray2(arr = [], number) {
    return arr.splice(-number).concat(arr)
}
console.log(roteArray([1, 2, 3, 4, 5, 6, 7], 2));
console.log(roteArray2([1, 2, 3, 4, 5, 6, 7], 2));

第 77 题:旋转数组算法题

不再让梦枯萎 2022-05-04 13:47:02

为什么不能监听数组的变化?

function(obj, key) {
  let val = obj[key];
  Object.defineProperty(obj, key, {
    enumerable: true,
    configurable: true,
    get() {
      console.log('in get');
      return val;
    },
    set(newVal) {
      if (newVal === val) {
        return;
      }
      val = newVal;
    }
  });
}
var a = [1, 2, 3]
defineReactive(a, 0)
a[0] = 5 // in get

这有什么问题?

这里说的不能监听数组变化是指{b:[1,2,3]},这样去改变b[0] =2是无法触发依赖收集的
而你这种写法实际上是不能算属于数组的监听了,实际上是利用了js最顶层原型是对象的原理,你监听的是a下面的0属性,a下面的1属性,甚至是a下面的length属性
原来研究过一下这个,不太记得当时的结论了,但是刚才想了下,你非要说可以监听的话,这样是能做到监听的没问题。但是这样浪费的性能将指数倍增加,你无法预估一个数组有多少层有多少位,你需要对数组每一层每一位进行依赖收集和更新时的notify。

第 123 题:Vue 是如何对数组方法进行变异的?例如 push、pop、splice 等方法

不再让梦枯萎 2022-05-04 01:52:48

一秒后同时输出 1、4、9

如果要每隔一秒输出把 forEach 换成普通 for 循环或者 for...of... 循环即可

这里并行进行是因为 forEach 实现的问题,源码里用 while 来一次性执行了所有回调

具体参考官网 polyfill: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

第 160 题:输出以下代码运行结果,为什么?如果希望每隔 1s 输出一个结果,应该如何改造?注意不可改动 square 方法

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文