我有一个数组,其中包含对象,每个对象都有一个名为sortOrder的键和分配给它的数字,并且该对象会根据顺序进行排序。如何在不手动更改sortOrder属性的情况下,以我喜欢的任何数字更改sordOrder属性?我尝试了一个if语句,但是它不起作用,我也不知道为什么,这是我的代码:



const array = [{
  name: "sam",
  sortOrder: 0
}, {
  name: "i",
  sortOrder: 4
}, {
  name: "that",
  sortOrder: 2
}, {
  name: "am",
  sortOrder: 3
}];

// Reordering the sortOrder values:
if (array.name === 'sam') {
  array.sortOrder = 4
}
array.sort((a, b) => a.sortOrder - b.sortOrder);

const list = document.getElementById("list");
const makeListItem = name => {
  const li = document.createElement("li");
  li.textContent = name;
  return li;
};
array.forEach(item => list.appendChild(makeListItem(item.name)));

<ol id="list">
</ol>





这是link to a CodePen

最佳答案

您的代码有问题

if(array.name === 'sam') {
  array.sortOrder = 4
}


array不具有属性namesortOrder,是此数组中具有这些属性的对象。

相反,您可以在数组上使用.find()来使用“ sam”的name在数组内获取对象,然后按如下所示更改其sortOrder:



const array = [{name: "sam", sortOrder: 0},{name: "i", sortOrder: 4},{name: "that", sortOrder: 2},{name: "am", sortOrder: 3}];

const samObj = array.find(obj => obj.name === "sam");
if (samObj) { // if an an object with the name of `sam` could be found, then we can safely modify its sortOrder property
  samObj.sortOrder = 4
}
array.sort((a, b) => a.sortOrder - b.sortOrder);

console.log(array);

关于javascript - 如何重新排列对象的sortOrder,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57251594/

10-11 04:17
查看更多