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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

慕絲7291255 2022-09-02 16:29:43
我有一個(gè)簡單的javascript代碼。但它沒有像我預(yù)期的那樣工作。我想從javascript對(duì)象中提取數(shù)據(jù),但是每當(dāng)我執(zhí)行該函數(shù)時(shí),即使我對(duì)原始數(shù)組未執(zhí)行任何操作,原始對(duì)象數(shù)組也會(huì)更改。是對(duì)象數(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。但是每當(dāng)我執(zhí)行測試函數(shù)時(shí).log控制臺(tái).log說原始數(shù)組allorderdemo會(huì)發(fā)生變化,因?yàn)槲也粫?huì)在函數(shù)中更改它。為什么會(huì)發(fā)生此錯(cuò)誤。請(qǐng)幫幫我。
查看完整描述

2 回答

?
隔江千里

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊

發(fā)生這種情況的原因是數(shù)組和對(duì)象都是非基元數(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)建一個(gè)新的JSON對(duì)象并將其推送到testArray。有關(guān)跨頁(...) 語法的更多詳細(xì)信息(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax)

此外,還應(yīng)將索引更改為,因?yàn)樗饕龔?0 開始。index > -1


查看完整回答
反對(duì) 回復(fù) 2022-09-02
?
侃侃爾雅

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊

您應(yīng)該從以下位置更改第 50 行:

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

自:

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

原因是因?yàn)槟愕拇a正在推送到testArray,只有對(duì)allorderDemo中已經(jīng)存在的同一對(duì)象的引用。我編寫的這段新代碼將創(chuàng)建一個(gè)具有相同數(shù)據(jù)的新對(duì)象,并將其推送到 testArray 中。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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