javascript笔记--数组
获取数组元素索引:
indexOf返回第一个找到的索引:可带起始索引
lastIndexOf返回最后一个找到的索引:可带起始索引
var animals = new Array("dog", "cat", "seal" , "elephant", "walrus", "lion","cat")
console.log(animals.indexOf("cat")); //prints 1
console.log(animals.lastIndexOf("cat"));//prints 6
console.log(animals.indexOf("cat", 2)); //prints 6
console.log(animals.lastIndexOf("cat", 4)); //prints 1
合并多维数组为一维数组:concat with apply method
var fruitarray = [];
fruitarray[0] = ['strawberry', 'orange'];
fruitarray[1] = ['lime','peach','banana'];
fruitarray[2] = ['tangerine', 'apricot'];
fruitarray[3] = ['raspberry', 'kiwi'];
var newarray = fruitarray.concat.apply([], fruitarray);
console.log(newarray[5]);
删除或替换数组元素:indexOf splice
splice() method takes three parameters; the first parameter is required,as
It's index where the splicing is to take place; the second,optional parameter is
the number of elements to remove; the third parameter ,also optional, is a set of
the replacement elements.
animals.splice(animals.indexOf("walrus"),1);
animals.splice(animals.lastIndexOf("cat"),1, "monkey");
console.log(animals.toString());
浅拷贝:slice()如果array元素是对象,浅拷贝指向相同的对象,在新数组中修改丢下会影响原来数组中的对象。;如果是原始数据类型:number/string.浅拷贝拷贝的是值,不是引用;修改新数组不会影响原来数组。
var animals = ['elephant', 'tiger', 'lion', 'zebra', 'cat', 'dog', 'rabbit', 'goose'];
var domestic = animals.slice(4, 7);
console.log(domestic);
var mArray = [];
mArray[0] = ['apple', 'pear'];
mArray[1] = ['strawberry', 'lemon'];
mArray[2] = ['lime', 'peach', 'berry'];
var nArray = mArray.slice(1,2);
console.log(mArray[1]);
nArray[0][0] = 'raspbeery';
console.log(nArray[0]);
console.log(mArray[1]);
通过一个回调函数遍历数组的每个元素,然后返回一个新数组: map()
var decArray = [23, 255, 122 ,5, 16, 99];
var hexArray = decArray.map(function(element) {
return element.toString(16);
});
console.log(hexArray);
对从qureySelector返回的NodeList使用forEach和call方法
var cells = document.querySelectorAll("td + td");
[].foreach.call(cells, function(cell){
sum+=parseFloat(cell.firstChild.data);
});
过滤数组元素,然后将结果赋给新数组:filter
var charSet = ["**", "bb", "cd", "**", "cc", "**", "dd", "**"];
var newArray = charSet.filter(function(element){
return (element != "**");
});
console.log(newArray);
验证数组元素符号某些标准:every(), some()
function testValue (element, index, array) {
var textExp = /^[a-zA-Z]+$/;
return textExp.test(element);
}
var elemSet = ["**", 123, "aaa", "abc", "-", 46, "AAA"];
var result = elemSet.every(testValue);
console.log(result);
var elemSet2 = ["elephant", "lion", "cat", "dog"];
result = elemSet2.every(testValue);
console.log(result);
关联数组:遍历数组使用keys() foreach();尽量不使用数组对象创建关联数组
当使用数组创建关联数组,实际添加新的属性到数组; 而不是添加新的数组元素;
使用数组创建关联数组,不能使用数字所有访问,返回长度为0;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Associative Array</title>
</head>
<body>
<form id="picker">
<label>Value 1:</label><input type="text" id="first"><br>
<label>Value 2:</label><input type="text" id="second"><br>
<label>Value 3:</label><input type="text" id="third"><br>
<label>Value 4:</label><input type="text" id="four"><br>
<button id="validate">Validate</button>
</form>
<div id="result"></div>
<script type="text/javascript">
//get the form element names and vales and validate
document.getElementById("validate").addEventListener('click', function (event) {
event.preventDefault();
//create array of element key/values
var elems = document.getElementById("picker").elements;
var elemArray = new Object();
for (var i=0; i<elems.length; i++) {
if (elems[i].type == "text") elemArray[elems[i].id] = elems[i].value;
}
var str = '';
Object.keys(elemArray).forEach(function (key) {
var value = elemArray[key];
str += key + '->' + value + '<br />';
});
document.getElementById("result").innerHTML = str;
}, false);
</script>
</body>
</html>
var elemArray = new Object();//object对象创建关联数组。
var elem = document.forms[0].elements[0];
elemArray[elem.di] = elem.value;
Object.keys(elemArray).forEach(function (key) {
var value = elemArray[key];
console.log(value);
});