Javascript 把一个物体推到一个复杂的阵列中
我试图将一个对象推送到一个复杂的数组中,我在考虑“DUMMY_PLACES[0].todos.byIds.push”之类的东西,但我没有成功。我有一个(id,content),默认情况下,完成的需要为false。希望得到帮助我相信这不太复杂,但我想不出来。附言:如果有人也可以帮助删除选项,我会很高兴 例如,我得到(5,test5)。我想要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”,
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
完全没有必要,我的答案保持不变。这段代码需要更好的封装。您正在尝试对非常复杂的对象执行相当复杂的操作。对象不应以这种方式使用。检查我的编辑,看看你是否喜欢这种方法。