Javascript,处理对象数组。获取字符串,用逗号分隔,并为对象赋值
我对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
“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;i log(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语句是否正确,因为我们要检查字符串中的某些关键字或空格。谢谢