gpt4 book ai didi

javascript - 数组对象的属性测试不等于原始值

转载 作者:行者123 更新时间:2023-12-01 03:52:16 25 4
gpt4 key购买 nike

很抱歉这个糟糕的标题——我试过了。

我试图保留对与给定类的 HTML 页面上的元素一一对应的对象的引用列表。我可以使用元素作为键、自定义对象作为值的 Map 来执行此操作,但对象已经具有引用该元素的属性,因此我尝试删除数据重复并仅对对象进行数组排列。然而,我认为是一个简单的任务似乎并不像我预期的那样工作。

我什至记录了应该比较相等的对象,并且它们看起来是相同的。

这是我的最小、完整且可验证的示例:

<!DOCTYPE html>
<html>
<head></head>
<body>
<div id="a-widget" class="widget"></div>
<div class="widget"></div>
<script type="text/javascript">
var widgetsArr = new Array();
var widgetsMap = new Map();

function createWidget(element) {
var widget = Object.create(null);
widget.element = element;
return widget;
}

function initWidgets() {
var elements = document.getElementsByClassName('widget');
for (var i=0; i < elements.length; ++i) {
widgetsArr.push(createWidget(elements[i]));
widgetsMap.set(elements[i], createWidget(elements[i]));
}
}

function getWidgetByElementFromArr(element) {
widgetsArr.forEach(function(item, index, array) {
if (item.element === element)
console.log(item);
return item;
});
}

function getWidgetByElementFromMap(element) {
var widget = widgetsMap.get(element);
console.log(widget);
return widget;
}

initWidgets();
console.log(widgetsArr[0]);
console.log(widgetsArr[0] === getWidgetByElementFromArr(document.getElementById('a-widget')));
console.log(widgetsMap.values().next().value);
console.log(widgetsMap.values().next().value === getWidgetByElementFromMap(document.getElementById
('a-widget')));
</script>
</body>
</html>

最佳答案

传递给forEach的函数不会导致循环终止或返回您期望的值。它将始终循环整个数组并且不返回奇异值。使用 find 代替:

function getWidgetByElementFromArr(element) {
return widgetsArr.find(function(item, index, array) {
return (item.element === element);
});
}

该函数的其他问题:它没有 return 语句。 if 主体周围缺少 {}

请注意,并非所有地方都支持 find,因此请使用 polyfill 或使用 filter(()=>{...})[0],或您认为合适的其他解决方法。

关于javascript - 数组对象的属性测试不等于原始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43078272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com