第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當我使用幾個 for () 函數(shù)循環(huán)訪問數(shù)組時,為什么原始數(shù)組會發(fā)生變化

當我使用幾個 for () 函數(shù)循環(huán)訪問數(shù)組時,為什么原始數(shù)組會發(fā)生變化

慕絲7291255 2022-09-02 16:29:43
我有一個簡單的javascript代碼。但它沒有像我預期的那樣工作。我想從javascript對象中提取數(shù)據(jù),但是每當我執(zhí)行該函數(shù)時,即使我對原始數(shù)組未執(zhí)行任何操作,原始對象數(shù)組也會更改。是對象數(shù)組結(jié)構(gòu)的問題嗎?還是異步問題?<!DOCTYPE html><html><head>    <title></title></head><body>    <button onclick="test()"> </button></body><script type="text/javascript">  var testArray = [];var num1 = 0;    var allorderDemo = [    {        name:'test1',        orders: [        {name: 'fanta', num:1},        {name: 'cola', num:2},        {name: 'sweet', num:1}        ]    },    {        name:'test2',        orders: [        {name: 'fanta', num:1},        {name: 'cola', num:2},        {name: 'sweet', num:1}        ]    },    {        name:'test3',        orders: [        {name: 'fanta', num:1},        {name: 'cola', num:2},        {name: 'ox', num:1}        ]    }    ];     function test(){        testArray = [];        for(var i = 0; i < allorderDemo.length; i++){            for(var j = 0; j < allorderDemo[i].orders.length; j++){                var index = testArray.findIndex(function(element) {                        return (element.name == allorderDemo[i].orders[j].name);                });                console.log("index",index);                if(index > 0) testArray[index].num += allorderDemo[i].orders[j].num;                else testArray.push(allorderDemo[i].orders[j]);            }        }        console.log(allorderDemo.length);      console.log(testArray);      console.log(allorderDemo);    }</script></html>     我想從allorderdemo中提取testarray。但是每當我執(zhí)行測試函數(shù)時.log控制臺.log說原始數(shù)組allorderdemo會發(fā)生變化,因為我不會在函數(shù)中更改它。為什么會發(fā)生此錯誤。請幫幫我。
查看完整描述

2 回答

?
隔江千里

TA貢獻1906條經(jīng)驗 獲得超10個贊

發(fā)生這種情況的原因是數(shù)組和對象都是非基元數(shù)據(jù)類型。您可以在此處閱讀更多相關(guān)信息 - https://medium.com/javascript-in-plain-english/javascript-reviewing-primitive-and-non-primitive-data-types-5bc4ca68c3de

在這種情況下,您必須執(zhí)行以下操作:

取代

testArray.push(allorderDemo[i].orders[j]);'

testArray.push({...allorderDemo[i].orders[j]});

這樣,它將創(chuàng)建一個新的JSON對象并將其推送到testArray。有關(guān)跨頁(...) 語法的更多詳細信息(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax)

此外,還應將索引更改為,因為索引從 0 開始。index > -1


查看完整回答
反對 回復 2022-09-02
?
侃侃爾雅

TA貢獻1801條經(jīng)驗 獲得超16個贊

您應該從以下位置更改第 50 行:

else testArray.push(allorderDemo[i].orders[j]);

自:

else testArray.push({name: allorderDemo[i].orders[j].name, num:allorderDemo[i].orders[j].num});

原因是因為你的代碼正在推送到testArray,只有對allorderDemo中已經(jīng)存在的同一對象的引用。我編寫的這段新代碼將創(chuàng)建一個具有相同數(shù)據(jù)的新對象,并將其推送到 testArray 中。


查看完整回答
反對 回復 2022-09-02
  • 2 回答
  • 0 關(guān)注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號