Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript,处理对象数组。获取字符串,用逗号分隔,并为对象赋值_Javascript_Arrays_List_Object_Debugging - Fatal编程技术网

Javascript,处理对象数组。获取字符串,用逗号分隔,并为对象赋值

Javascript,处理对象数组。获取字符串,用逗号分隔,并为对象赋值,javascript,arrays,list,object,debugging,Javascript,Arrays,List,Object,Debugging,我对Javascript非常陌生,如果有任何帮助,我将不胜感激 所以取一个如下的字符串:“John Doe,5554443333,Jane Doe,555555” 我们要将每个人分配给一个对象,然后将这个对象分配给一个数组,并打印数组以显示我们的玩家。预期产出将是: [{ player: 'John Doe', contact: 5554443333}, { player: 'Jane Doe', contact: 5555555555}] 我当前的输出是: [{ player: 'Jane

我对Javascript非常陌生,如果有任何帮助,我将不胜感激

所以取一个如下的字符串:
“John Doe,5554443333,Jane Doe,555555”

我们要将每个人分配给一个对象,然后将这个对象分配给一个数组,并打印数组以显示我们的玩家。预期产出将是:

[{ player: 'John Doe', contact: 5554443333}, { player: 'Jane Doe', contact: 5555555555}]
我当前的输出是:

[{ player: 'Jane Doe', contact: 5555555555}, , { player: 'Jane Doe', contact: 5555555555}]
因此,当前的问题是,它在player对象之间放置了两个逗号,并且它两次列出了第二个player

我的代码如下:

function playerManager(players) 
{

  var blank = [];  // blank array to return per requirements (nil, none, null, or empty string)
  var info = players.split(','); // Split our input string, into a string array, split at comma
  var data = []; // Create array to hold our players, then return.

  // function to create player 
  var player =
  {

  player: "name",
  contact: "contact"

  };

    // check if our string is empty, nil, none, or null, if it is , return our blank array 
    if(players == "" || players == "nil" || players == "None" || players == "null")
    {

    return blank;

    }

      for( i = 0; i < info.length - 1; i+=2)
      {

      player.player = info[i];
      player.contact = info[i+1];

      data[i] = player; 

      }

    return data;

}
函数播放器管理器(播放器)
{
var blank=[];//根据需求返回的空白数组(nil、none、null或空字符串)
var info=players.split(',');//将输入字符串拆分为字符串数组,以逗号分隔
var data=[];//创建数组来容纳玩家,然后返回。
//创建播放器的函数
var播放器=
{
玩家:“名字”,
联系人:“联系人”
};
//检查字符串是否为空、nil、none或null,如果为空,则返回空白数组
如果(玩家==“”| |玩家==“零”| |玩家==“无”| |玩家==“空”)
{
返回空白;
}
对于(i=0;i

非常感谢您的帮助。

看,问题是,当您使用信息创建一个玩家,然后在第一轮将其插入玩家数组时,您的playerArr[0]引用的是您创建的玩家(这是一个对象)。到目前为止没有问题。但是当它进入第二轮时,您更新了player对象,这也使得playerArr[0]也发生了变化!这是因为playerArr[0]实际上是一个指向播放器对象的指针(您刚刚更新了它)

这应该起作用:

函数播放器管理器(播放器)
{
var info=players.split(',');//将输入字符串拆分为字符串数组,以逗号分隔
var data=[];//创建数组来容纳玩家,然后返回。
对于(i=0;ilog(playerManager(“John Doe,5554443333,Jane Doe,55555555”))
当你用
i+=2
增加你的
for..loop
时,你像这样推送值

 data[i] = player; 
因此,最初对于
0
索引是正确的,但在下一个增量之后
i
将是
2
。下一个值将在
2
索引上赋值,因此
1
索引将为空

所以,您可以在for循环内部使用方法,而不是在数组索引中赋值

演示

const str=“约翰·多伊,5554443333,简·多伊,5555”;
函数playerManager(玩家){
设arr=players.split(','),
数据=[];
对于(设i=0;i

.as控制台包装{max height:100%!important;top:0;}
所以这里有几个地方出了问题

简单一点:由于迭代的方式,
i+=2
,您将第二个对象推到第三个位置,即
i[2]

一种简单的修复方法是迭代一次(
i++
),最多迭代
info.length/2
,但在函数中使用
i*2

例:

for(i=0;i}
一种更简单、更简短的声明式替代方案,假设玩家姓名和联系人的顺序始终相同:

const input = 'John Doe, 5554443333, Jane Doe, 5555555555';
const result = input.split(',').map(str => str.trim()).reduce((all, item, i, arr) => {

    if (i % 2 === 1) {
        all.push({player: arr[i-1], contact: Number(item)});
    } 
    return all;

}, []);

console.log(result);

请忽略将我的对象标记为函数(以前是构造函数)的错误注释,以及if语句是否正确,因为我们要检查字符串中的某些关键字或空格。谢谢