标签:car 名称 javascrip ken map 数字 结果 oda round
点菜展示表
给你一个数组 orders,表示客户在餐厅中完成的订单,确切地说, orders[i]=[customerNamei,tableNumberi,foodItemi] ,其中 customerNamei 是客户的姓名,tableNumberi 是客户所在餐桌的桌号,而 foodItemi 是客户点的餐品名称。
请你返回该餐厅的 点菜展示表 。在这张表中,表中第一行为标题,其第一列为餐桌桌号 “Table” ,后面每一列都是按字母顺序排列的餐品名称。接下来每一行中的项则表示每张餐桌订购的相应餐品数量,第一列应当填对应的桌号,后面依次填写下单的餐品数量。
注意:客户姓名不是点菜展示表的一部分。此外,表中的数据行应该按餐桌桌号升序排列。
示例 1:
输入:orders = [["David","3","Ceviche"],["Corina","10","Beef Burrito"],["David","3","Fried Chicken"],["Carla","5","Water"],["Carla","5","Ceviche"],["Rous","3","Ceviche"]] 输出:[["Table","Beef Burrito","Ceviche","Fried Chicken","Water"],["3","0","2","1","0"],["5","0","1","0","1"],["10","1","0","0","0"]] 解释: 点菜展示表如下所示: Table,Beef Burrito,Ceviche,Fried Chicken,Water 3 ,0 ,2 ,1 ,0 5 ,0 ,1 ,0 ,1 10 ,1 ,0 ,0 ,0 对于餐桌 3:David 点了 "Ceviche" 和 "Fried Chicken",而 Rous 点了 "Ceviche" 而餐桌 5:Carla 点了 "Water" 和 "Ceviche" 餐桌 10:Corina 点了 "Beef Burrito"
示例 2:
输入:orders = [["James","12","Fried Chicken"],["Ratesh","12","Fried Chicken"],["Amadeus","12","Fried Chicken"],["Adam","1","Canadian Waffles"],["Brianna","1","Canadian Waffles"]] 输出:[["Table","Canadian Waffles","Fried Chicken"],["1","2","0"],["12","0","3"]] 解释: 对于餐桌 1:Adam 和 Brianna 都点了 "Canadian Waffles" 而餐桌 12:James, Ratesh 和 Amadeus 都点了 "Fried Chicken"
示例 3:
输入:orders = [["Laura","2","Bean Burrito"],["Jhon","2","Beef Burrito"],["Melissa","2","Soda"]] 输出:[["Table","Bean Burrito","Beef Burrito","Soda"],["2","1","1","1"]]
提示:
1 <= orders.length <= 5 * 10^4orders[i].length == 31 <= customerNamei.length, foodItemi.length <= 20customerNamei 和 foodItemi 由大小写英文字母及空格字符 ‘ ‘ 组成。tableNumberi 是 1 到 500 范围内的整数。
/**
* @param {string[][]} orders
* @return {string[][]}
*/
// 菜单排序一直不对号,从网上copy了个排序,不对,又把字符串所有的ascii加起来排序,也不对。其实 arr.sort()就对了,sort默认的排序方式为字母排序。它这个排序规则是区分大小写,按照ascii排序。
// 从网上copy的那个排序,它都转换成小写字母了,ascii自然就变了。
// sort 这个方法只有在比较数字的时候能 通过 a-b 升序排列,
// sort 字符串比较的时候只能是 if (a > b) return 1; 进行升序排列
// 因为 如果是字符串的话 相减不会自动类型转换 出现 NAN, NAN, NAN ,就返回了原数组。但是可以 做 大于 和 小于 比较。
var displayTable = function(orders) {
const mysort = (arr)=>{
// 为什么单纯的sort 就不行
arr.sort(function(s, t) {
// let a;
// let b;
// for(let i=0; i<s.length; i++){
// a+=s[i].charCodeAt()
// }
// for(let i=0; i<t.length; i++){
// b+=t[i].charCodeAt()
// }
// 就是因为网上拷贝的这个排序方法,转了一下小写,结果就懵逼了,不知怎么排序。以为这个排序是对的
let a = s.toLowerCase();
let b = t.toLowerCase();
if (a < b) return -1;
if (a > b) return 1;
return 0;
})
return arr;
}
let map = new Map();
orders.forEach(([name, id, cai])=>{
if(map.has(id)){
map.get(id).push(cai)
}else{
map.set(id, []);
map.get(id).push(cai);
}
})
let allcad = [];
for(let [key, val] of map){
allcad.push(...val)
}
let allcadMap = new Map()
allcad.forEach((a)=>{
if(!allcadMap.has(a)){
allcadMap.set(a, 1)
}
})
allcad = [...allcadMap.keys()];
allcad = mysort(allcad);
// allcad
// allcad.sort()
let m1 = [];
for(let [key, val] of map){
let arr = new Array(allcad.length).fill(0);
val.forEach(v=>{
let i = allcad.indexOf(v);
arr[i]++;
})
let mm = [key, ...arr]
mm = mm.map((a, index)=>{
if(index>=1) {
return ‘‘+a
} else {
return a
}
})
m1.push(mm)
}
m1.sort((a, b)=>a[0]- b[0]);
let newArr = ["Table", ...allcad];
m1.unshift(newArr)
return m1
};
标签:car 名称 javascrip ken map 数字 结果 oda round
原文地址:https://www.cnblogs.com/zhangzs000/p/12730959.html