首页 > 解决方案 > 如何将对象内的数组元素移动到数组的末尾

问题描述

这是我们的对象:

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"]

    }

标签: javascript

解决方案


用于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)


推荐阅读