javascript - 如何将对象内的数组元素移动到数组的末尾
问题描述
这是我们的对象:
let obj = {
"I was sent": ["I was sent", "I was forced"],
"to earth": ["to earth", "to moon"],
"to protect you": [ "to find you", "to protect you", "to love you"]
}
我想将基于属性名称的数组元素移动到数组的末尾。
期望的结果是:
let obj = {
"I was sent": ["I was forced", "I was sent"],
"to earth": ["to moon", "to earth"],
"to protect you": [ "to find you", "to love you", "to protect you"]
}
解决方案
用于Object.entries()
将对象转换为 [key, value] 对的数组。映射数组,并为每一对检查k
值 ( v
) 中键 ( ) 的索引。如果找到索引,则将键移动到值的末尾。通过 将数组转换回对象Object.fromEntries()
。
const obj = {
"I was sent": ["I was sent", "I was forced"],
"to earth": ["to earth", "to moon"],
"to protect you": [ "to find you", "to protect you", "to love you"]
}
const result = Object.fromEntries(Object.entries(obj)
.map(([k, v]) => {
const index = v.findIndex(s => s === k)
return [
k,
index > -1 ? [...v.slice(0, index), ...v.slice(index + 1), k] : v
]
}))
console.log(result)
如果 key 总是在 value 中找到,你总是可以将其过滤掉,并将其添加到数组的末尾:
const obj = {
"I was sent": ["I was sent", "I was forced"],
"to earth": ["to earth", "to moon"],
"to protect you": [ "to find you", "to protect you", "to love you"]
}
const result = Object.fromEntries(Object.entries(obj)
.map(([k, v]) => {
const newV = [...v.filter(s => s !== k), k]
return [k, newV]
}))
console.log(result)
推荐阅读
- database - 在颤振中使用 sqflite 保存嵌套模型的有效方法
- reactjs - React Native - 长按并显示额外信息
- javascript - SVG 在 react-natvie 中表现得很奇怪
- javascript - 为在 Nodejs 项目中导入文件定义文件路径或文件夹路径的最佳方法
- ubuntu - 芹菜守护进程启动错误
- reporting-services - 按单元格背景颜色过滤 SSRS
- c - 您是否能够在 C 中跨模块设置构造函数优先级?
- office365 - 使用 WOPI 集成的 Word Online 中禁用/未显示加载项
- python - 为什么使用 importlib.util 会破坏类型比较?
- http - 如何获取使用 fetch 从后端发回的错误消息