[小笔记]TypeScript/JavaScript映射两组数据
【需求】在Python3中有一个函数是zip()函数,它接收两个序列(如列表\元组等)作为参数,将两者中的元素进行一一绑定形成成组,构成一个有两个元素按照一定结构组织的可迭代对象,(Python2就是数组),这个新的可迭代对象可以转换为字典(dict)。在这里,我们将TypeScript/JavaScript中的对象模仿Python中的字典,数组模仿Python中的列表实现zip()函数。
JavaScript
var zip = function (key_array, value_array) { var res = {}; for (var i = 0; i < key_array.length; i++) { var k = key_array[i]; var obj = {}; obj[k] = value_array[i]; res = Object.assign(res, obj); } return res; };
TypeScript
export declare type PropertyName = string | number; export const zip = function(keys: PropertyName[], values: any[]) { let res = {}; for (let i = 0; i < keys.length; i++) { let k = keys[i]; let obj:Record<PropertyName,any> = {}; obj[k] = values[i]; res = Object.assign(res, obj); } return res; }
用例
let a = [1,3,4,2]; let b = ['a','b','c','d']; console.log(zip(a,b));
Out[]:
{ '1': 'a', '2': 'd', '3': 'b', '4': 'c' }
应用: 以一个数值数组的元素大小顺序对另一个数组排序
JavaScript
var bSortBya = function (a, b) { var obj = exports.zip(a, b); var c = a.sort(); var res = []; for (var i = 0; i < a.length; i++) { res.push(obj[c[i]]); } return res; };
TypeScript
export const bSortBya = function(a: number[],b: any[]){ let obj = zip(a,b); let c=a.sort(); let res=[]; for(let i=0; i<a.length; i++){ res.push(obj[c[i]]); } return res }
用例
let a = [1,3,4,2]; let b = ['a','b','c','d']; console.log(bSortBya(a,b));
Out[]:
[ 'a', 'd', 'b', 'c' ]