为什么我的数组不会像我在循环对象时那样更新?使用Javascript

问题描述 投票:0回答:5

我正在尝试查看对象数组并给出特定对象的type属性,将该对象保存在数组中

如果我有:

data = [
  {type: "recare", value: "Hello", ... },
  {type: "tocall", value: "World", ... },
  {type: "recare", value: "People", ...}
];

这是我的代码:

var recare = [];
var toCall = [];

data.map(function(k) {
  console.log(k.reason)
  if (k.type == 'recare') {
    recare[k] = k
    console.log("recare", recare)
  } else if (k.type == 'tocall') {
    toCall[k] = k
    console.log("tocall", toCall)
  }
});

我不确定为什么,但对象没有正确保存,因为他们应该。由于有多个recare,阵列中应该有两个条目,但只有最后一个出现,我有什么做错了?

javascript arrays dictionary
5个回答
1
投票

你不能这样做recare[k]这意味着你将数组键设置为无效的对象,你可以使用push Array方法插入数据或使用i map函数,以便push在我所在的位置相同原来的array

var data = [
  {type: "recare", value: "Hello" },
  {type: "tocall", value: "World" },
  {type: "recare", value: "People"}
];
var recare = [];
var toCall = [];

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

console.log("recare ---------");
console.log(recare);
console.log("toCall---------");
console.log(toCall);

您还可以使用其他几个选项,例如forEach和filter

forEachfor循环是适合Arrays的套件,在你的用例映射中不适用于这种类型的工作它看起来像forEach但是在你希望操作数组并希望返回相同数组作为修改结果的情况下使用

因为你有Array

var sample = ["a","b","c","d"];

你想在所有append中使用"z" index

sample  = sample.map(val=>(val+"z"));

结果

["az","bz","cz","dz"]

过滤器将是您返回的最佳选择

var recare = data.filter(function(k){ return k.type == "recare" });

0
投票

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

这是一个有效的代码:

const data = [
  {type: "recare", value: "Hello"},
  {type: "tocall", value: "World"},
  {type: "recare", value: "People"}
]

let recare = [];
let toCall = [];

data.map(e => {
  if(e.type == 'recare') {
    recare.push(e.value)
  } else if(e.type == 'tocall') {
    toCall.push(e.value)
  }
});

console.log(recare)
console.log(toCall)

您还可以使用不同的数据结构:例如,将结果作为包含两个数组的对象作为键recaretocall的值,如下所示:

let result = {recare: [], tocall: []}

然后map语句会更短:

data.map(e => result[e.type].push(e.value));

const data = [
  {type: "recare", value: "Hello"},
  {type: "tocall", value: "World"},
  {type: "recare", value: "People"}
]

let result = {recare: [], tocall: []}

data.map(e => result[e.type].push(e.value));

console.log(result)

0
投票

传递给map回调的第一个参数是元素而不是索引。 传递给map的参数按此顺序包含data-element,index,array。 而且你的元素是一个不是整数的对象,所以它不能用作索引。 您可以使用push方法在所需数组的末尾插入元素。

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

-1
投票

recare[k] = k改为recare.push(k)

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


-1
投票

if (k.type == 'recare') { recare.push( k ); console.log("recare", recare) }

这应该让你的对象最后被推入数组,给你数组上的数字索引,我相信这是你的意图。

© www.soinside.com 2019 - 2024. All rights reserved.