let receipts_array =["Anna 0.4","Peter 0.25","Anna 0.5","Peter 0.5","Peter 0.33"]; //
我怎么能拆分这个数组,所以我可以得到第一个索引只是安娜和第二个0.4,因为我需要总结数字,然后看看谁赢了 输出只是彼得
答案 0 :(得分:2)
您可以使用一个对象来对名称的值求和,并通过检查值来减少键。
array.forEach(s => {
var [k, v] = s.split(' ');
count[k] = (count[k] || 0) + +v;
});
这意味着将array
的每个项目都视为s
,按空格分割该字符串,并使用数组的destructuring assignment分为两个名称为k
和{的项目{1}}作为关键和价值。
然后使用v
作为对象k
的键,获取此值,如果没有给出,则将零作为默认值。然后通过unary plus +
将字符串转换为数字来添加值。
稍后将总和分配给count
的属性k
。
count
对于预期的相同值,您可以返回包含获胜者名称的数组。
var array = ["Anna 0.4", "Peter 0.25", "Anna 0.5", "Peter 0.5", "Peter 0.33"],
count = Object.create(null);
array.forEach(s => {
var [k, v] = s.split(' ');
count[k] = (count[k] || 0) + +v;
});
console.log(Object.keys(count).reduce((a, b) => count[a] > count[b] ? a : b));
console.log(count);
答案 1 :(得分:1)
假设发布的数据样本,您可以使用函数split
和函数reduce
。
let receipts_array = ["Anna 0.4", "Peter 0.25", "Anna 0.5", "Peter 0.5", "Peter 0.33"];
var result = receipts_array.reduce((a, c) => {
var [name, number] = c.split(/\s+/);
a[name.trim()] = (a[name.trim()] || 0) + +number.trim();
return a;
}, {});
var winner = Object.keys(result).sort((a, b) => result[a] - result[b]).pop();
console.log(result);
console.log(winner);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:1)
您可以使用itens分割将数组映射到另一个数组,如下所示:
CREATE TABLE IF NOT EXISTS `app`.`manual` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
`content` TEXT NULL,
`listorder` TINYINT NULL,
`keywords` TEXT NULL,
`display_list` TINYINT NULL,
`parent_id` INT NULL,
PRIMARY KEY (`id`),
INDEX `fk_manual_manual1_idx` (`parent_id` ASC),
CONSTRAINT `fk_manual_manual1`
FOREIGN KEY (`parent_id`)
REFERENCES `app`.`manual` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
id parent_id
1 null
2 1
3 2
4 3
5 4
6 5
7 6
然后你可以对你得到的数组进行排序并获得第一名。
const resulting_array = receipts_array.map(x => ({name: x.split(' ')[0], points: +x.split(' ')[1]}))
通过这种方式,您可以将对象与具有最高权限的人一起使用。
const first_place = resulting_array.sort((a, b) => a.points < b.points ? 1 : -1)[0]
我建议你将信息存储在一个对象数组中,就像从地图函数中得到的那样。
答案 3 :(得分:1)
我使用 Array.prototype.forEach
来遍历数组,然后使用 split
按空格分割所有元素,然后创建一个将保持总值得分的对象对于不同的球员,并根据该分数选择获胜者。
var receipts_array =["Anna 0.4","Peter 0.25","Anna 0.5","Peter 0.5","Peter 0.33"];
var x=[],max=-10000,winner;
receipts_array.forEach(function(e){
var y=e.split(" "); //split the value
if(!x[y[0]]){ //check if object with key exist or not
x[y[0]]=parseFloat(0); //if object not exist create one
}
x[y[0]]+=parseFloat(y[1]); // add score of player
if(x[y[0]]>max){ //compare for max score
max=x[y[0]];
winner=y[0];
}
});
console.log(winner);
&#13;
答案 4 :(得分:1)
您可以创建一个词典,其键是名称。
let receipts_array = ["Anna 0.4", "Peter 0.25", "Anna 0.5", "Peter 0.5", "Peter 0.33"];
var result = receipts_array.reduce((obj, c) => {
var [name, number] = c.split(/\s+/);
obj[name] = (obj[name] || 0) + parseFloat(number);
return obj;
},{});
console.log(result);
var winner = Object.keys(result).reduce(function(a, b){ return result[a] > result[b] ? a : b });
console.log('The winner is ' + winner)
.as-console-wrapper { max-height: 100% !important; top: 0; }