簡體   English   中英

嵌套的 Object.keys() 打印屬性多次而不是一次

[英]Nested Object.keys() are printing properties multiple times instead of only once

我有兩個需要循環的對象,以便以后可以使用它們的屬性。 但是,如果我打印變量,每個變量都會打印兩次。 我明白,因為我在其他 Object.keys( Object.keys()中有Object.keys() 有沒有辦法循環遍歷這兩個對象並且只獲取每個變量一次?

我的代碼:

Object.keys(newData.name).map(async key => {
    Object.keys(newData._temp.images).map(async keyImage => {
        console.log(newData.name[key].name,'printed 2x instead of once');
        console.log(newData._temp.images[keyImage].rawFile.preview, 'printed 2x instead of once');
    });
});

先感謝您。

您在這里嵌套循環的邏輯是錯誤的。

這 2 個 object 似乎沒有相互連接,這意味着您不需要第一個循環中的數據來執行其他循環。 只需將其拆分為 2 個單獨的循環,即可節省時間和重復次數:

let nameKeys = Object.keys(newData.name).map(key => newData.name[key].name);
let imagesKeys = Object.keys(newData._temp.images).map(keyImage => 
                 newData._temp.images[keyImage].rawFile.preview);

現在您可以隨時訪問nameKeysimageKeys ,它們將包含您之前記錄的值。 我的命名可能有點偏離,請隨意更改:D

此外,正如其他人提到的那樣 - 不需要async關鍵字......您不會在內部執行任何異步操作(但是,至少。如果這就是您的計划,那么 go 領先並保持它)。

這些迭代器不需要嵌套。 第二個迭代器沒有循環通過第一個迭代器的項目。

Object.keys(newData.name).forEach(key => {
    console.log(newData.name[key].name);
});
Object.keys(newData._temp.images).forEach(keyImage => {
    console.log(keyImage[keyImage].rawFile.preview);
});

如果您只對輸出數據感興趣,那么.map()不是正確的 function 使用,因為當您關心返回值時使用它。 如果您只想循環遍歷事物,請使用.forEach()

此外,這里不需要async關鍵字.. 除非您打算稍后在循環中執行一些 async/await 的東西!

您可以遍歷索引一次,然后訪問 arrays 中的值:

 const names = Object.keys(newData.name);
 const images = Object.keys(newData._temp.images);

for(let i = 0; i < Math.min(names.length, images.length); i++) {
  const name = names[i];
  const image = images[i];
  //...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM