javascript - 如何重新排列对象的排序顺序

标签 javascript arrays object

我有一个数组,其中包含内部对象,每个对象都有一个名为 sortOrder 的键和分配给它的数字,并且该对象根据顺序进行排序。如何动态更改 sortOrder 属性为我喜欢的任何数字,而无需手动更改 sortOrder 属性?我尝试使用 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() 在数组上使用 name 获取数组内的对象“sam”,然后更改其排序顺序,如下所示:

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 - 如何重新排列对象的排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57251594/

相关文章:

C++:数组元素设置为 0

java - 提取素数

javascript - 返回用 Javascript 构建的新对象

javascript - 无法创建 SQL-DB

javascript - Array.prototype.map() 需要来自箭头函数 array-callback-return 的返回值

javascript - 获取外部文件信息(状态和大小)时出现问题

php - 通过 yii2 Html a() 发送 post 数组

javascript - 谷歌地图删除标记效率太高

java - 如何在Java和C#中获取定义的元素之前和之后的所有元素

ruby - ruby 如何区分单引号字符串和双引号字符串?是否涉及C指针?