首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何观察数组的变化?

如何观察数组的变化?
EN

Stack Overflow用户
提问于 2011-02-24 04:32:55
回答 8查看 118.1K关注 0票数 124

在Javascript中,当一个数组被推、弹出、移位或基于索引的赋值被修改时,有没有一种方法可以得到通知?我想要一个能触发我能处理的事件的东西。

我知道SpiderMonkey中的watch()功能,但只有在将整个变量设置为其他值时,该功能才有效。

EN

回答 8

Stack Overflow用户

发布于 2015-07-22 19:45:49

通过阅读这里的所有答案,我组装了一个不需要任何外部库的简化解决方案。

它还更好地说明了该方法的一般思想:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function processQ() {
   // ... this will be called on each .push
}

var myEventsQ = [];
myEventsQ.push = function() { Array.prototype.push.apply(this, arguments);  processQ();};
票数 27
EN

Stack Overflow用户

发布于 2018-05-23 06:49:30

我使用了以下代码来侦听数组的更改。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* @arr array you want to listen to
   @callback function that will be called on any change inside array
 */
function listenChangesinArray(arr,callback){
     // Add more methods here if you want to listen to them
    ['pop','push','reverse','shift','unshift','splice','sort'].forEach((m)=>{
        arr[m] = function(){
                     var res = Array.prototype[m].apply(arr, arguments);  // call normal behaviour
                     callback.apply(arr, arguments);  // finally call the callback supplied
                     return res;
                 }
    });
}

希望这是有用的:)

票数 13
EN

Stack Overflow用户

发布于 2012-11-10 23:54:32

我发现以下代码似乎可以实现这一点:https://github.com/mennovanslooten/Observable-Arrays

Observable-Arrays扩展了下划线,可以使用如下方式:(从该页面)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// For example, take any array:
var a = ['zero', 'one', 'two', 'trhee'];

// Add a generic observer function to that array:
_.observe(a, function() {
    alert('something happened');
});
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5100376

复制
相关文章
Interection Observer如何观察变化
有很多精彩的文章探讨了如何使用Intersection Observer API,包括Phil Hawksworth,Preethi和Mateusz Rybczonek等。我这篇文章将讲一些不一样的东西。我在今年早些时候有幸向达拉斯VueJS聚会介绍了VueJS过渡组件,我在CSS-Tricks的第一篇文章就是以此为基础的。在演讲的问答环节中,有人问我基于滚动事件触发过渡怎么样 - 我说当然可以,但是一些听众建议我了解一下Intersection Observer。
WecTeam
2019/12/16
2.6K0
Interection Observer如何观察变化
vue使用watch 观察路由变化,重新获取内容
在用Vue开发的过程中总会遇到这样或者那样的坑。vue的路由发生变化分两种情况,一种是pathname变化(或是hash变化),第二种是参数变化,第一种发生变化时,组件会重新加载,各个生命周期都会执行。
挥刀北上
2019/08/06
2.8K0
vue使用watch 观察路由变化,重新获取内容
Vue是怎样监听数组的变化的?
其实我们并不是要你把答案都记下来,而是把其中的思想学习到。就像你接触一个新的领域react,你也一样可以把基本思想提炼出来。
bb_xiaxia1998
2022/10/17
4390
vue使用watch 观察路由变化,重新获取内容
watch: { $route(to) { console.log(to) if (to.path.indexOf('index') != -1) { //路由变化后重新获取帖子列表 this.$http.get('/api/communityList').then((res) => { if (res.data.errCode === 0)
庞小明
2018/07/04
6120
Vue是怎样监听数组的变化的?
其实我们并不是要你把答案都记下来,而是把其中的思想学习到。就像你接触一个新的领域react,你也一样可以把基本思想提炼出来。
bb_xiaxia1998
2022/10/05
5090
关于 vue 不能 watch 数组变化 和 对象变化的解决方案
再如使用 splice(0, 2, 3) 从数组下标 0 删除两个元素,并在下标 0 插入一个元素 3:
Krry
2018/10/10
6.8K0
如何应对变化?
当你的一个项目数据库都定下来后,而且已经开发了若干个工作日,突然接到甲方公司提出,某个功能要改变,原先的需求分析要重新改,如果这个修改是涉及的数据库的表结构更改的话,那真是最致命的。
PM吃瓜
2020/07/23
6230
React数组变化之后,视图没有更新
react数组变化之后,视图没有更新 数组保存在state中,修改数组之后视图没有更新 function updateData(data) { this.setState({ data: data }) } 上面代码是修改状态值的,这样设置会导致视图没有更新,修改为如下代码即可: function updateData(data) { this.setState({ data: [...data] }) }
寻找石头鱼
2020/06/05
2.9K0
【每日一题】【vue2源码学习】vue如何检测数组的变化
数组可以用defineProperty进行监听。但是考虑性能原因,不能数组一百万项每一项都循环监听(那样性能太差了)。所以没有使用Ojbect.defineProperty对数组每一项进行拦截,而是选择劫持数组原型上的个别方法并重写。
xing.org1^
2020/09/29
1.1K0
如何应对不断变化的需求?
在我知道DDD之前,对于如何给类命名,我曾经提到过以下的想法。 如果我们用客户习惯使用的词语来命名类呢?这难道不让我们更容易向客户解释我们为他们实际建造了什么吗? 当然,实际中有可能是完全错误的,但我想说我们与客户使用这种方式进行对话是有原因的:不断涌现的新需求。 这不是一个bug,它是一个特性 问题是,我们的大多数项目都是基于固定的价格(和固定的功能)。在收集了所有的需求之后,就会以一种对我们来说有意义的方式构建了这个东西,实现一些不言而喻的业务规则。 但是,在最初的发布之后,我们会从客户那里得到不断增加
lyb-geek
2022/03/09
3830
34道Vue面试题系列:Vue中如何检测数组变化?
本次解析本套高级前端的Vue面试题的第三问,Vue中是如何检测数组变化的,如果对这一问也有所不熟悉的,请一起学习吧。
用户1462769
2020/03/31
2.8K0
34道Vue面试题系列:Vue中如何检测数组变化?
「R」观察R是如何工作的
R中的一切皆对象,R表达式也是R对象。这意味着我们可以从语法上解析R表达式,或者部分地执行R表达式,来观察R是如何解释它们的。这对于了解R的工作机制或者调试R代码十分有用。
王诗翔呀
2020/07/03
5560
Object.defineProperty也能监听数组变化?
首先,解答一下标题:Object.defineProperty 不能监听原生数组的变化。如需监听数组,要将数组转成对象。
德育处主任
2022/09/09
5470
NodeJS是如何监听文件的变化?
Keywords: 操作系统差异、识别用户/编辑器操作、连续触发的优化、工程级 API。
心谭博客
2020/04/21
4.8K0
linux如何监控文件变化
使用nohup,其中test.sh为所执行的脚本,out.txt为输出信息的地方。
用户10002156
2023/09/12
1K0
linux如何监控文件变化
vue数组更新界面无变化
1. vue数组更新界面无变化 1.1. 说明 对数组进行更新或者添加,一定要注意方式,我的情况是数组套数组,双重循环,在造数据的时候,不断从尾部添加数据,所以写成了如下形式,每次下拉都会去加载一批相同的数据添加到尾部。初步一看好像没啥问题,实际上我碰到的就是有时候成功有时候数据一点没有显示 this.arrList[this.arrList.length] = {}; this.arrList[this.arrList.length-1].dataList = newArr; this.arrList[t
老梁
2019/09/10
6160
函数调用时栈是如何变化的?
大家都知道函数调用是通过栈来实现的,而且知道在栈中存放着该函数的局部变量。但是对于栈的实现细节可能不一定清楚。本文将介绍一下在Linux平台下函数栈是如何实现的。
嵌入式与Linux那些事
2021/12/17
3.6K0
函数调用时栈是如何变化的?
如何爬取实时变化的 WebSocket 数据
作为一名爬虫工程师,在工作中常常会遇到爬取实时数据的需求,比如体育赛事实时数据、股市实时数据或币圈实时变化的数据。如下图:
Python编程与实战
2019/12/04
1.8K1
vue3如何监听 props 的变化?
实际开发过程中,当需要通过 watch 监听传入的 props 的某个值的变化,来动态改变组件内部的样式,实现方式如下:
蓓蕾心晴
2023/09/07
1.7K0
敏捷项目如何拥有管理变化的能力?
敏捷项目宣称拥抱变化,现实中很多变化来源于不确定性,而不确定性总是和风险相关的,所以敏捷项目拥抱变化也就意味着与风险共处,拥有了管理变化的能力,也就拥有了管理风险的能力。
ThoughtWorks
2020/08/09
8580

相似问题

观察布尔数组中的变化

05

如何观察RxSwift中数组属性的变化

10

如何告诉流星“观察”数组中的变化?

21

观察UICollectionView的visibleCells数组的变化

225

如何在vb .net中观察数组的变化

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文