js一个简单问题,大佬求救

wctmac123 2021-03-02 07:19:08
var test = [];
for (var i = 0; i < 2; i++) {
var info = { headimg: "cc", js: "bb", uname: "oo" };
var a = test.includes(info);
console.log(a);
test.push(info);
var b = test.includes(info);
console.log(b);
}


为何输出的是 false,true,false,true
我的理解是第一次false,是因为info还没添加到test数组,但是第二次循环的时候test已经有一个info值了,怎么还是false不是true
...全文
186 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wctmac123 2021-03-03
  • 打赏
  • 举报
回复
引用 1 楼 天际的海浪 的回复:
你两次循环每次都创建一个新的info对象,两次创建的对象是不同的地址。 includes方法比较两个对象时是按地址比较的,不是按对象内容比较的。 两个对象的地址不同,就认为不相等。就算两个对象内容一样也不行。
那请问我需要比较内容的话,应该用什么方法
wctmac123 2021-03-03
  • 打赏
  • 举报
回复
已经解决,map渲染需要强制刷新
wctmac123 2021-03-03
  • 打赏
  • 举报
回复
引用 3 楼 天际的海浪 的回复:
[quote=引用 2 楼 wctmac123 的回复:][quote=引用 1 楼 天际的海浪 的回复:]你两次循环每次都创建一个新的info对象,两次创建的对象是不同的地址。 includes方法比较两个对象时是按地址比较的,不是按对象内容比较的。 两个对象的地址不同,就认为不相等。就算两个对象内容一样也不行。
那请问我需要比较内容的话,应该用什么方法[/quote]

function incontent(arr,obj) {
	var str = JSON.stringify(obj);
	return arr.some(x=>JSON.stringify(x)==str);
}
var test = [];
for (var i = 0; i < 2; i++) {
    var info = { headimg: "cc", js: "bb", uname: "oo" };
    var a = incontent(test,info);
    console.log(a);
    test.push(info);
    var b = incontent(test,info);
    console.log(b);
}

[/quote] 大佬,我现在把数组抛弃了,改用map的,遇到个问题,不知道您这边是否能指点下 listData是一个map,onmessage是一个监听方法,收到一条监听信息就往map里插入一条,然后用v-for渲染,我调试了下listData是有map具体数据插入的,但是v-for却无法渲染,是哪里写错了么 var res = new Vue({ el: '#app', data: { listData: new Map(), userid: "", name: "", age: "" } }); ws.onmessage = function (evt) { var received_msg = evt.data; res.userid=msg.split(';')[0]; var datainfo= { name: 'cathy', age:18}; res.listData.set(res.userid, datainfo); }; <div id="app"> <div v-for="(value, key) in listData" :key="key"> <div v-for="item in value"> {{item.name}}{{item.age}} </div> </div> </div>
我爱小仙女 2021-03-03
  • 打赏
  • 举报
回复
比较内容就把内容存在test中啊 test.push(JSON.stringify(info))
天际的海浪 2021-03-03
  • 打赏
  • 举报
回复
引用 2 楼 wctmac123 的回复:
[quote=引用 1 楼 天际的海浪 的回复:]你两次循环每次都创建一个新的info对象,两次创建的对象是不同的地址。 includes方法比较两个对象时是按地址比较的,不是按对象内容比较的。 两个对象的地址不同,就认为不相等。就算两个对象内容一样也不行。
那请问我需要比较内容的话,应该用什么方法[/quote]

function incontent(arr,obj) {
	var str = JSON.stringify(obj);
	return arr.some(x=>JSON.stringify(x)==str);
}
var test = [];
for (var i = 0; i < 2; i++) {
    var info = { headimg: "cc", js: "bb", uname: "oo" };
    var a = incontent(test,info);
    console.log(a);
    test.push(info);
    var b = incontent(test,info);
    console.log(b);
}

天际的海浪 2021-03-02
  • 打赏
  • 举报
回复
你两次循环每次都创建一个新的info对象,两次创建的对象是不同的地址。 includes方法比较两个对象时是按地址比较的,不是按对象内容比较的。 两个对象的地址不同,就认为不相等。就算两个对象内容一样也不行。

39,085

社区成员

发帖
与我相关
我的任务
社区描述
HTML5是构建Web内容的一种语言描述方式。HTML5是互联网的下一代标准,是构建以及呈现互联网内容的一种语言方式.被认为是互联网的核心技术之一。
社区管理员
  • HTML5社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧