Javascript 把一个物体推到一个复杂的阵列中

Javascript 把一个物体推到一个复杂的阵列中,javascript,arrays,push,Javascript,Arrays,Push,我试图将一个对象推送到一个复杂的数组中,我在考虑“DUMMY_PLACES[0].todos.byIds.push”之类的东西,但我没有成功。我有一个(id,content),默认情况下,完成的需要为false。希望得到帮助我相信这不太复杂,但我想不出来。附言:如果有人也可以帮助删除选项,我会很高兴 例如,我得到(5,test5)。我想要 const DUMMY\u PLACES=[ { 待办事项:{ allIds:[1,2,3,4,], byIds:{ "1": { 内容:“test1”,

我试图将一个对象推送到一个复杂的数组中,我在考虑“DUMMY_PLACES[0].todos.byIds.push”之类的东西,但我没有成功。我有一个(id,content),默认情况下,完成的需要为false。希望得到帮助我相信这不太复杂,但我想不出来。附言:如果有人也可以帮助删除选项,我会很高兴

例如,我得到(5,test5)。我想要

const DUMMY\u PLACES=[
{
待办事项:{
allIds:[1,2,3,4,],
byIds:{
"1": {
内容:“test1”,
已完成:错误,
},
"2": {
内容:“test2”,
已完成:错误,
},
"3": {
内容:“test3\\”,
已完成:错误,
},
"4": {
内容:“test4”,
已完成:错误,
},
},
},
visibilityFilter:“全部”,
},

];您的代码缺少封装。这里最好的方法是创建一个新类并为此创建一个setter

用示例编辑:

类UserTodo
{
构造函数(visibilityFilter='all')
{
此.\u visibilityFilter=visibilityFilter;
这是。_byIds=newmap();
}
/**
*@details使用内容文本添加todo
*/
addTodo(标题、内容)
{
常量值={
内容,,
已完成:false
}
此.u byIds.set(标题、值);
}
/**
*@Details决定您是要在此处获取整个对象还是仅获取内容
*/
盖托多(标题)
{
返回此。\u byIds.get(标题);
}
completeTodo(标题)
{
this.\u byIds.get(title).completed=true;
}
/**
*@详细信息作为如何删除特定todo的奖励
*/
删除TODO(标题)
{
删除(标题);
}
/**
*@details这将从示例返回allid
*/
getAllIds()
{
从(this._byIds.keys())返回Array.from;
}
/**
*@details这将从示例返回visibilityFilter
*/
getVisibility()
{
返回此。\u visibilityFilter;
}
//实现其他getter
}
//为什么这是一个偶数数组?
常量虚拟位置=[];
DUMMY_PLACES.push(newusertodo('all'));
const toDoTitle=‘某些标题’;
//添加新的待办事项
DUMMY_PLACES[0].addTodo(toDoTitle,'Do Something');
//检查todo是否已添加
log(DUMMY_PLACES[0].getTodo(toDoTitle));
//完成它
虚拟位置[0]。完成todotto(todottle);
//检查是否已完成

log(DUMMY_PLACES[0].getTodo(toDoTitle))也许你需要这样的东西

const DUMMY_PLACES=[{todos:{allid:[1,2,3,4],byid:{“1”:{content:“test1”,completed:false,},“2”:{content:“test2”,completed:false,},“3”:{content:“test3\\”,completed:false,},“4”:{content:“test4”,completed:false,},},},},visibilityFilter:“all”,},];
函数pushObject(id、内容){
虚拟位置[0].todos.allIds.push(id);
DUMMY_PLACES[0].todos.byIds[id]={…content,completed:false};
}
pushObject(5,{content:“test5”});

console.dir(虚拟位置)
这里看一下
addTodo
函数,它创建了
todoList
的一个新实例,并在其末尾添加了一个新元素。它还修改
id
的列表。我已经评论了几乎每一行,所以它应该是非常简单的

let todoList = [
  {
    todos: {
      allIds: [1, 2, 3, 4],
      byIds: {
        "1": {
          content: "test1",
          completed: false,
        },
        "2": {
          content: "test2",
          completed: false,
        },
        "3": {
          content: "test3",
          completed: false,
        },
        "4": {
          content: "test4",
          completed: false,
        },
      },
    },
    visibilityFilter: "all",
  },
];

let addTodo = (sourceArray, el) => {
  // Create a copy of an original array
  let targetArray = [];
  Object.assign(targetArray, sourceArray);

  let todos = targetArray[0].todos;

  // Calculate the Id for a new element
  let newId = Object.keys(todos.byIds).length + 1;

  // Add new Id to the `allIds` list
  todos.allIds.push(newId);

  // Create a new element
  todos.byIds[newId] = {
    content: el,
    completed: false
  }

  return targetArray;
}

todoList = addTodo(todoList, 'test5');
todoList = addTodo(todoList, 'test6');
todoList = addTodo(todoList, 'test7');

console.log(JSON.stringify(todoList));
输出应为:

[
  {
    "todos":{
      "allIds":[
        1,
        2,
        3,
        4,
        5,
        6,
        7
      ],
      "byIds":{
        "1":{
          "content":"test1",
          "completed":false
        },
        "2":{
          "content":"test2",
          "completed":false
        },
        "3":{
          "content":"test3",
          "completed":false
        },
        "4":{
          "content":"test4",
          "completed":false
        },
        "5":{
          "content":"test5",
          "completed":false
        },
        "6":{
          "content":"test6",
          "completed":false
        },
        "7":{
          "content":"test7",
          "completed":false
        }
      }
    },
    "visibilityFilter":"all"
  }
]

你想推什么?需要在复杂数组中推的
对象
在哪里?这里的主要问题似乎是你存储数据的方式。我同意@baaohere@Ethanolle这与意见或观点无关
todos
应该是一个数组,其中包含
ById
所做的(现在错误地作为对象)作为数组而不是对象,并且
AllID
完全没有必要,我的答案保持不变。这段代码需要更好的封装。您正在尝试对非常复杂的对象执行相当复杂的操作。对象不应以这种方式使用。检查我的编辑,看看你是否喜欢这种方法。