如何将数组索引拆分为该特定索引的2个索引

时间:2018-03-22 15:54:36

标签: javascript arrays sorting split

let receipts_array =["Anna 0.4","Peter 0.25","Anna 0.5","Peter 0.5","Peter 0.33"]; // 

我怎么能拆分这个数组,所以我可以得到第一个索引只是安娜和第二个0.4,因为我需要总结数字,然后看看谁赢了 输出只是彼得

5 个答案:

答案 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 按空格分割所有元素,然后创建一个将保持总值得分的对象对于不同的球员,并根据该分数选择获胜者。

&#13;
&#13;
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;
&#13;
&#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; }