gpt4 book ai didi

javascript - 复制数组上的拼接会从父/主数组中删除对象

转载 作者:行者123 更新时间:2023-11-28 12:26:00 25 4
gpt4 key购买 nike

我有一个你可以称之为父数组的东西,一个主数组。页面加载时,出现 json_encoded包含网站上每个用户信息的 PHP 数组被分配给一个 JS 变量 - var all_users = <?php echo $users;?>; 。一个console.log这个数组看起来像这样...

[Object, Object, Object, Object, Object, Object, Object, Object, Object]
0: Object
user_id: "4"
registered: "2015-02-15 12:54:34"
...etc
1: Object
user_id: "5"
...etc

在外部 .js文件我有一些用于各种过滤选项的事件处理程序。目前,这些过滤器的工作方式是向服务器发送 AJAX 请求、查询数据库,然后返回数据。这很棒,但是没有必要每次都查询数据库(只有大约 50 条记录),因此改变了我对 JS 数组的处理方式。

因此,我的解决方案是首先复制 all_users 的内容到一个新变量 display_users ,每次调用下面的函数时(以便重置 display_users 以包含所有用户)。这个新变量的目的是能够删除与用户过滤器不匹配的任何记录。例如搜索 user_id = 4将导致第二个、第三个、第四个……对象从 display_users 中删除,只留下那些匹配的。

var display_users = [];

function update_users (type) {
display_users = all_users;
i = 0;

$.each(all_users, function() {
var user = this;
$.each(user, function(k, v) {
// show_admin_only is true or false
if (show_admin_only) {
// if the key is_admin has a value of 0 they are not an admin, remove them from the display users array
if (k == 'is_admin' && v == 0) display_users.splice(i,1);
}
});
i++;
});

// pass the array through to a jQuery template
}

然而,问题是拼接导致了错误。第一次运行该函数时一切都很好,但是第二次 Chrome 报告了两个警告,'window.webkitStorageInfo' is deprecated. Please use 'navigator.webkitTemporaryStorage' or 'navigator.webkitPersistentStorage' instead.'webkitIndexedDB' is deprecated. Please use 'indexedDB' instead. 。发生这些错误后,该函数的任何 future 运行都会导致从两个数组(主数组和副本数组)中删除记录。

鉴于此,我猜 display_users充当指向主数组的指针,all_users ,但这对我来说没有多大意义,这就是为什么我现在完全不知所措。一个console.log i = 0 之后的两个数组输出这个...

Run 1
[Object, Object, Object, Object, Object, Object, Object, Object, Object]
[Object, Object, Object, Object, Object, Object, Object, Object, Object]

Run 2
[Object, Object, Object, Object, Object, Object, Object, Object]
[Object, Object, Object, Object, Object, Object, Object, Object]

// for every run, -1 Object from BOTH arrays

我添加了console.log(user); $.each(user, function(k, v) {内正是在第二次、第三次……运行期间,它开始输出数百个 Window {top: Window, window: Window, location: Location, external: Object, chrome: Object…}以及预期的,例如 Object {user_id: "4", registered_date: "2015-02-15 12:54:34" ... } .

有谁知道为什么会发生这种情况吗?抱歉,这篇文章很长,这可能是一个非常简单的修复......!

最佳答案

用于重复使用:

display_users = all_users.slice();

关于javascript - 复制数组上的拼接会从父/主数组中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28522025/

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