簡體   English   中英

我有對象數組,我的目標是僅使用 forEach 按升序打印對象的年齡

[英]I have array of objects, My goal is to print age of objects in ascending order using forEach only

我以學生的名義在該數組中有 Array 我有四個不同的對象。 現在我必須打印這些對象,但年齡應該按升序排列,我只能通過僅使用forEach來執行此操作。

 var students = [{ name: 'Mark', age: 28 }, { name: 'Johnson', age: 30 }, { name: 'Williams', age: 12 }, { name: 'Henry', age: 27 } ] students.forEach(fun) function fun(currentValue, index, arr) { console.log(currentValue) }

您不使用forEach對數組進行排序,而是使用sort (不足為奇!)

 var students = [{ name: 'Mark', age: 28 }, { name: 'Johnson', age: 30 }, { name: 'Williams', age: 12 }, { name: 'Henry', age: 27 } ] students.sort(sortByAge).forEach(fun) function sortByAge(a,b){ return a.age - b.age; } function fun(currentValue, index, arr) { console.log(currentValue) }

我認為你必須對 arrya 進行分類並打印出來。

希望這有效。

 var students = [{ name: 'Mark', age: 28 }, { name: 'Johnson', age: 30 }, { name: 'Williams', age: 12 }, { name: 'Henry', age: 27 } ] function sortArray( a, b ) { if ( a.age < b.age ){ return -1; } if ( a.age > b.age ){ return 1; } return 0; } students.sort( sortArray ); students.forEach(fun) function fun(currentValue, index, arr) { console.log(currentValue) }

我希望這是一個動態的解決方案,將來也可以用於您的系統。

function dynamicSort(property) {
    var sortOrder = 1;
    if(property[0] === "-") {
        sortOrder = -1;
        property = property.substr(1);
    }
    return function (a,b) {
        /* next line works with strings and numbers, 
         * and you may want to customize it to your needs
         */
        var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
        return result * sortOrder;
    }
}

當你這樣做時它會起作用:

students.sort(dynamicSort("name"));
students.sort(dynamicSort("name"));

如果我正確理解了這個問題,你可能會被允許做一個簡單的冒泡排序。

假設你有這樣的事情

var students = [{
    name: 'Mark',
    age: 28
  },
  {
    name: 'Johnson',
    age: 30
  },
  {
    name: 'Williams',
    age: 12
  },
  {
    name: 'Henry',
    age: 27
  }
]

console.log(bubbleSort(students.map(x => x.age)))

您也許可以使用這兩種冒泡排序算法之一

使用 foreach 和 for 循環

let bubbleSort = (inputArr) => {
    let len = inputArr.length;
    inputArr.forEach(function(i){
        for (let j = 0; j < len; j++) {
            if (inputArr[j] > inputArr[j + 1]) {
                let tmp = inputArr[j];
                inputArr[j] = inputArr[j + 1];
                inputArr[j + 1] = tmp;
            }
        }
    })

    return inputArr;
};

使用 foreach 和 do/while 循環

let bubbleSort = (inputArr) => {
    let len = inputArr.length;
    let swapped;
    do {
        swapped = false;
          inputArr.forEach(function(number, i){
            if (inputArr[i] > inputArr[i + 1]) {
                let tmp = inputArr[i];
                inputArr[i] = inputArr[i + 1];
                inputArr[i + 1] = tmp;
                swapped = true;
            }
          })
    } while (swapped);
    return inputArr;
};

https://www.studytonight.com/data-structures/bubble-sort

要對任何數據進行排序,它需要最少的 O(nlogn) 操作,但 forEach 函數只會調用 n 次。 因此,您無法僅使用 forEach 來做到這一點。

但如果你真的只想使用 forEach,讓我們對異步 js 使用一些魔法:

var students = [{
    name: 'Mark',
    age: 28
  },
  {
    name: 'Johnson',
    age: 30
  },
  {
    name: 'Williams',
    age: 12
  },
  {
    name: 'Henry',
    age: 27
  }
]

students.forEach(fun)

function fun(currentValue) {
  setTimeout(() => console.log(currentValue), currentValue.age);
}

請不要在生產中使用此解決方案

暫無
暫無

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

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