为什么不';当我循环通过一个对象时,我的数组是否应该更新?Javascript

为什么不';当我循环通过一个对象时,我的数组是否应该更新?Javascript,javascript,arrays,dictionary,Javascript,Arrays,Dictionary,我试图查看一个对象数组,给定一个特定对象的type属性,将该对象保存在一个数组中 如果我有: data = [ {type: "recare", value: "Hello", ... }, {type: "tocall", value: "World", ... }, {type: "recare", value: "People", ...} ]; 这是我的代码: var recare=[]; var-toCall=[]; 数据映射(函数(k){ console.log(k.r

我试图查看一个对象数组,给定一个特定对象的type属性,将该对象保存在一个数组中

如果我有:

data = [
  {type: "recare", value: "Hello", ... },
  {type: "tocall", value: "World", ... },
  {type: "recare", value: "People", ...}
];
这是我的代码:

var recare=[];
var-toCall=[];
数据映射(函数(k){
console.log(k.reason)
如果(k.type=='recare'){
重铸[k]=k
console.log(“recare”,recare)
}else if(k.type==“tocall”){
toCall[k]=k
日志(“tocall”,tocall)
}
});

我不知道为什么,但对象没有正确保存。由于有多个
recare
数组中应该有两个条目,但只有最后一个条目显示,我有什么做得不正确?

您不能这样做
recare[k]
,这意味着您正在将数组键设置为无效的对象,您可以使用
push
方法
Array
插入数据,也可以使用
map
功能
i
在原始
Array
的相同位置上进行
push
var数据=[
{type:“recare”,value:“Hello”},
{类型:“tocall”,值:“World”},
{type:“recare”,value:“People”}
];
var recare=[];
var-toCall=[];
数据映射(函数(k,i){
如果(k.type=='recare'){
重铸推力(k);
}else if(k.type==“tocall”){
toCall.push(k);
}
});
控制台.log(“recare------------------”);
控制台日志(recare);
console.log(“toCall-----”);

控制台日志(toCall)更改
recare[k]=k
recare.push(k)

k
是一个对象,因此不能将其用作索引。

可以将值(
e
)传递给的回调函数。然后检查
e.type
是否等于
recare
tocall
以及正确数组的值

以下是工作代码:

const数据=[
{type:“recare”,value:“Hello”},
{类型:“tocall”,值:“World”},
{type:“recare”,value:“People”}
]
让recare=[];
让toCall=[];
data.map(e=>{
如果(e.type=='recare'){
重铸推力(e值)
}else if(e.type==“tocall”){
toCall.push(即值)
}
});
console.log(recare)
console.log(toCall)
if(k.type=='recare'){
重铸推力(k);
console.log(“recare”,recare)
}


这将使您的对象在最后被推入数组,为您提供数组上的数字索引,我相信这是您的意图

传递给映射回调的第一个参数是元素而不是其索引。
传递给map的参数的顺序如下:数据元素索引数组
而且您的元素是一个对象而不是整数,所以它不能用作索引。
您可以使用push方法在所需数组的末尾插入元素

data.map(function(k){ 
       if (k.type =='recare') { 
           recare.push(k)
       } else if(k.type == 'tocall'){
             toCall.push(k)
       } });

你到底想达到什么目的?请说得具体一点。
.map()
返回一个新数组,用于转换数组中的每个元素。如果您只想迭代数组的元素,请使用
.forEach()
。您也可以使用
.filter()
。虽然此代码可以回答问题,但提供有关如何和/或为什么解决问题的附加上下文将提高答案的长期价值。这不是
的用例。@Andreas是的,我知道!