1.filter(function, iterable)
參數,是數組的方法
function – 判斷函數。
iterable – 可迭代對象。
#過濾列表中所有奇數
def is_odd(n):
return n % 2 == 1
tmplist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
newlist = list(tmplist)
print(newlist)
用法二:
2.數組中的find的方法
find() 方法返回數組中滿足提供的測試函數的第一個元素的值。否則返回 undefined。
示例如下:
示例一:
const array1 = [5, 12, 8, 130, 44];
const found = array1.find(element => element > 10);
console.log(found);
// expected output: 12
示例二:
var inventory = [
{name: 'apples', quantity: 2},
{name: 'bananas', quantity: 0},
{name: 'cherries', quantity: 5}
];
function findCherries(fruit) {
return fruit.name === 'cherries';
}
console.log(inventory.find(findCherries)); // { name: 'cherries', quantity: 5 }
3.數組的map方法
var removeElement = function(nums, val) {
nums.map(function (item, index){
if(item === val){
console.log(index); // 2 3 第一次原數組輸出val項的index爲2,下邊splice改變了原數組爲[1,2,4,3,5],在執行函數進入判斷輸出val項的index爲3
nums.splice(index, 1);
}
});
};
removeElement([1,2,3,4,3,5], 3);
通過以上例子可以看出,如果我們在某一次循環改變原數組的話,那麼接下來循環的處理是在已經改變的數組的基礎上進行的。
4.數組中的some方法
5.數組中的every方法
6.Object.keys(obj)
let person = {name:“張三”,age:25,address:“圳”,getName:function(){}};
console.log(Object.keys(person));
3.處理數組,返回索引值數組
let arr = [1,2,3,4,5,6];
console.log(Object.keys(arr)); //[“0”, “1”, “2”, “3”, “4”, “5”]
4.處理字符串,返回索引值數組
let str = “ikun你好”;
console.log(Object.keys(str)); // [“0”, “1”, “2”, “3”, “4”, “5”]
5常用技巧
let person = {name:“張三”,age:25,address:“深圳”,getName:function(){}};
Object.keys(person).map((key)=>{
console.log(person[key]); // 獲取到屬性對應的值,做一些處理
})
6.Object.value(obj)
1.返回一個數組,成員是參數對象自身的(不含繼承的)所有可遍歷屬性的鍵值
let obj = {
foo : "bar",
baz : 20
};
console.log(Object.values(obj)); // ["bar", 20]
2.返回數組的成員順序,與屬性的遍歷部分介紹的排列規則一致
const obj = {100 : "a", 2 : "b", 7 : "c"};
console.log(Object.values(obj)); //["b", "c", "a"]
屬性名爲數值的屬性,是按照數值大小,從小到大遍歷的,因此返回的順序是b、c、a。
3.Object.values()只會遍歷對象自身的可遍歷屬性
const obj = Object.create({},{p : {value : 10}});
console.log(Object.values(obj));
console.log(Object.getOwnPropertyDescriptors(obj));
Object.create方法的第二個參數添加的對象屬性(屬性p),如果不顯式聲明,默認是不可遍歷的,因爲p的屬性描述對象的enumerable默認是false,Object.values不會返回這個屬性。
因此只要把enumerable改成true,Object.values就會返回屬性p的值。
const obj = Object.create({},{p:{
value : 10,
enumerable : true,
configurable : true,
writable : true,
}})
console.log(Object.values(obj)); //[10]
4.Object.values會過濾屬性名爲 Symbol 值的屬性
//如果Object.values方法的參數是一個字符串,會返回各個字符組成的一個數組。
Object.values({ [Symbol()]: 123, foo: 'abc' });
console.log(Object.values('foo')); //["f", "o", "o"]
字符串會先轉成一個類似數組的對象,字符串的每個字符,就是該對象的一個屬性。因此,Object.values返回每個屬性的鍵值,就是各個字符組成的一個數組
5.如果參數不是對象,Object.values會先將其轉爲對象
console.log(Object.values(42)); // []
console.log(Object.values(true)); // []
console.log(Object.values(undefined)); //error
console.log(Object.values(null)); //error
由於數值和布爾值的包裝對象,都不會爲實例添加非繼承的屬性,因此Object.values會返回空數組。
7.Object.entries()
1.Object.entries方法返回一個數組,成員是參數對象自身的(不含繼承的)所有可遍歷(enumerable)屬性的鍵值對數組
var obj = { foo: 'bar', baz: 42 };
console.log(Object.entries(obj));
2.如果原對象的屬性名是一個 Symbol 值,該屬性會被省略
console.log(Object.entries({ [Symbol()]: 123, foo: 'abc' })); // [ [ 'foo', 'abc' ] ]
3.原對象有兩個屬性,Object.entries只輸出屬性名非 Symbol 值的屬性。
遍歷對象的屬性
let obj = {
one : 1,
two : 2,
}
for(let [k , v] of Object.entries(obj)){
console.log(`${JSON.stringify(k)} : ${JSON.stringify(v)}`);
}