1.Object.values(es6)
Object.values方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。
const obj = { foo: 'bar', baz: 42 };
Object.values(obj)
// ["bar", 42]
2.Set
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set 本身是一个构造函数,用来生成 Set 数据结构。
const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
for (let i of s) {
console.log(i);
}
// 2 3 5 4
上面代码通过add方法向 Set 结构加入成员,结果表明 Set 结构不会添加重复的值。
Set 函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。
// 例一
const set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]
// 例二
const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
items.size // 5
// 例三
function divs () {
return [...document.querySelectorAll('div')];
}
const set = new Set(divs());
set.size // 56
// 类似于
divs().forEach(div => set.add(div));
set.size // 56
上面代码中,例一和例二都是Set函数接受数组作为参数,例三是接受类似数组的对象作为参数。
3.map
map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
// ES6
let numbers = [1, 5, 10, 15];
let doubles = numbers.map( x => x ** 2);
// doubles is now [1, 25, 100, 225]
// numbers is still [1, 5, 10, 15]
const numbers = [2, 4, 8, 10];
let halves = numbers.map(x => x / 2);
let numbers = [1, 4, 9];
let roots = numbers.map(Math.sqrt);
// roots is now [1, 2, 3]
// numbers is still [1, 4, 9]
4.Array.from()
Array.from() 方法从一个类似数组或可迭代对象中创建一个新的数组实例。
Array from a String
Array.from('foo');
// ["f", "o", "o"]
Array from a Set
let s = new Set(['foo', window]);
Array.from(s);
// ["foo", window]
Array from a Map
let m = new Map([[1, 2], [2, 4], [4, 8]]);
Array.from(m);
// [[1, 2], [2, 4], [4, 8]]
Array from an Array-like object (arguments)
function f() {
return Array.from(arguments);
}
f(1, 2, 3);
// [1, 2, 3]
Using arrow functions and Array.from
// Using an arrow function as the map function to
// manipulate the elements
Array.from([1, 2, 3], x => x + x);
// [2, 4, 6]
// Generate a sequence of numbers
// Since the array is initialized with `undefined` on each position,
// the value of `v` below will be `undefined`
Array.from({length: 5}, (v, i) => i);
// [0, 1, 2, 3, 4]
5.findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。
function isBigEnough(element) {
return element >= 15;
}
[12, 5, 8, 130, 44].findIndex(isBigEnough);
// '3'
6.sort() 方法
sort() 方法用于对数组的元素进行排序。
arrayObject.sort(sortby)
7.按照规定的顺序排序
下面例子实现的功能是:获取到的复选框如果有roomTypesTemp 里面的值,就必须按照roomTypesTemp 里面的顺序排序,如果没有,则放在后面
// 得到复选框里面的值
getcheckedRoomType:function(){
let self = this;
let app = jtl.app.Base.getApp();
let typeNumber = app.floorplan.globalEnvironment;
let roomTypesTemp = [];
if(typeNumber == 4){//洋房
roomTypesTemp = ['客厅','餐厅','客餐厅','主卧','卧室一','卧室二','卧室三','卧室四','卧室五','多功能房','书房','衣帽间','厨房','主卫','公卫','工卫','卫生间前室'];
}else{//公区
roomTypesTemp = ['大堂','电梯厅','电梯厅一','电梯厅二','门廊','门斗','入户前室一','入户前室二'];
}
let rooms = Object.values(app.floorplan.rooms);
let roomNameList = new Set();
for (let room of rooms) {
let roomTypeText = ResourceManager.getString('model_roomtype_' + room.roomType);
if (roomTypeText === undefined) {
roomTypeText = room.roomType;
}
roomNameList.add(roomTypeText);
}
console.log(roomNameList);
if(typeNumber == 4){
['客厅','餐厅','客餐厅'].forEach(_ => roomNameList.add(_));
}
roomNameList = [...roomNameList].sort((a, b) => {
a = roomTypesTemp.findIndex(_ => _ === a);
if (a < 0) a = Infinity;
b = roomTypesTemp.findIndex(_ => _ === b);
if (b < 0) b = Infinity;
return a - b;
});
self.roomTypes = roomNameList;
},