JS - 有序数列

************************

作者:张启卫

时间: 2017年6月3号

功能:

* 介绍以索引进行排序的数据集合。

************************

1. 数组对象

1.1 创建数组

var arr = new Array(element0, element1, ..., elementN);
var arr = Array(element0, element1, ..., elementN);
var arr = [element0, element1, ..., elementN];

// 译者注: var arr=[4] 和 var arr=new Array(4)是不等效的,
// 后者4指数组长度,所以使用字面值(literal)的方式应该不仅仅是便捷,同时也不易踩坑
var arr = new Array(arrayLength);
var arr = Array(arrayLength);

// 这样有同样的效果
var arr = [];
arr.length = arrayLength;

数组作为属性赋值给对象

var obj = {};
// ...
obj.prop = [element0, element1, ..., elementN];

// OR
var obj = {prop: [element0, element1, ...., elementN]}
var arr = [42];      // 创建一个只有唯一元素的数组:
                     // the number 42.
var arr = Array(42); // 创建一个没有元素的数组,
                     // 但是数组的长度被设置成42.

// 上面的带码与下面的代码等价
var arr = [];
arr.length = 42;

注意:如果你需要创建任意类型的单元素数组,安全的方式是使用字面值。或者在向数组添加单个元素之前先创建一个空的数组。

1.2 填充数据

var emp = [];
emp[0] = "Casey Jones";
emp[1] = "Phil Lesh";
emp[2] = "August West";
var myArray = new Array("Hello", myVar, 3.14159);
var myArray = ["Mango", "Apple", "Orange"]

1.3 引用数据元素

var arr = ["one", "two", "three"];
arr[2];  // three
arr["length"];  // 3

注意: 理解length, 在实施层面, JavaScript实际上是将元素作为标准的对象属性来存储,把数组索引作为属性名。长度属性是特殊的,它总是返回最后一个元素的索引值加1

var cats = [];
cats[30] = [‘Dusty‘];
console.log(cats.length); // 31

可以分配length属性。写一个小于数组元素数量的值会缩短数组,写0会彻底清空数组:

var cats = [‘Dusty‘, ‘Misty‘, ‘Twiggy‘];
console.log(cats.length); // 3

cats.length = 2;
console.log(cats); // logs "Dusty,Misty" - Twiggy has been removed

cats.length = 0;
console.log(cats); // logs nothing; the cats array is empty

cats.length = 3;
console.log(cats); // [undefined, undefined, undefined]

1.4 遍历数组

最简单的

var colors = [‘red‘, ‘green‘, ‘blue‘];
for (var i = 0; i < colors.length; i++) {
  console.log(colors[i]);
}
var divs = document.getElementsByTagName(‘div‘);
for (var i = 0, div; div = divs[i]; i++) {
  /* Process div in some way */
}

forEach 循环

var colors = [‘red‘, ‘green‘, ‘blue‘];
colors.forEach(function(color) {
  console.log(color);
});
var array = [‘first‘, ‘second‘, , ‘fourth‘];

// returns [‘first‘, ‘second‘, ‘fourth‘];
array.forEach(function(element) {
  console.log(element);
})

if(array[2] === undefined) { console.log(‘array[2] is undefined‘); } // true

var array = [‘first‘, ‘second‘, undefined, ‘fourth‘];

// returns [‘first‘, ‘second‘, undefined, ‘fourth‘];
array.forEach(function(element) {
  console.log(element);
})

一旦 JavaScript 元素被保存为标准的对象属性,通过for...in 循环来迭代迭代将变得不明智,因为正常元素和所有可枚举的属性都会被列出。

1.5 数组方法

常用方法

concat() 连接两个数组并返回一个新的数组

var myArray = new Array("1", "2", "3");
myArray = myArray.concat("a", "b", "c");
// myArray is now ["1", "2", "3", "a", "b", "c"]

join(deliminator = ",") 将数组所有元素连接成一个字符串。

var myArray = new Array("Wind", "Rain", "Fire");
var list = myArray.join(" - "); // list is "Wind - Rain - Fire"

push() 在数组未尾添加一个或多个元素,并返回数组操作后的长度。

var myArray = new Array("1", "2");
myArray.push("3"); // myArray is now ["1", "2", "3"]

pop() 从数组移出最后一个元素,并返回该元素。

var myArray = new Array("1", "2", "3");
var last = myArray.pop();
// myArray is now ["1", "2"], last = "3"

shift() 从数组移出第一个元素,并返回该元素

var myArray = new Array ("1", "2", "3");
var first = myArray.shift();
// myArray is now ["2", "3"], first is "1"

unshift() 在数组开头添加一个或多个元素,并返回数组的新长度

var myArray = new Array ("1", "2", "3");
myArray.unshift("4", "5");
// myArray becomes ["4", "5", "1", "2", "3"]

slice(start_index, upto_index) 从数组提取一个片段,并作为一个新数组返回。

var myArray = new Array ("a", "b", "c", "d", "e");
myArray = myArray.slice(1, 4); // starts at index 1 and extracts all elements
                               // until index 3, returning [ "b", "c", "d"]

slice(index, count_to_remove, addElement1, addElement2, ...) 从数组移出一些元素,替换它们。

var myArray = new Array ("1", "2", "3", "4", "5");
myArray.splice(1, 3, "a", "b", "c", "d");
// myArray is now ["1", "a", "b", "c", "d", "5"]
// This code started at index one (or where the "2" was),
// removed 3 elements there, and then inserted all consecutive
// elements in its place.

reverse() 颠倒数组元素的顺序: 第一个变成最后一个,最后一个变成第一个。

var myArray = new Array ("1", "2", "3");
myArray.reverse();
// transposes the array so that myArray = [ "3", "2", "1" ]

sort() 给数组元素排序

var myArray = new Array("Wind", "Rain", "Fire");
myArray.sort();
// sorts the array so that myArray = [ "Fire", "Rain", "Wind" ]

indexOf(searchElement[, fromIndex])  在数组中搜索searchElement 并返回第一个匹配的索引。

var a = [‘a‘, ‘b‘, ‘a‘, ‘b‘, ‘a‘];
console.log(a.indexOf(‘b‘)); // logs 1
// Now try again, starting from after the last match
console.log(a.indexOf(‘b‘, 2)); // logs 3
console.log(a.indexOf(‘z‘)); // logs -1, because ‘z‘ was not found

lastIndexOf(searchElement, [, fromIndex]) 和 indexOf 差不多,但这是从结尾开始,并且是反向搜索。

var a = [‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘a‘, ‘b‘];
console.log(a.lastIndexOf(‘b‘)); // logs 5
// Now try again, starting from before the last match
console.log(a.lastIndexOf(‘b‘, 4)); // logs 1
console.log(a.lastIndexOf(‘z‘)); // logs -1

forEach(callback [, thisObject]) 在数组每个元素项上执行callback。

var a = [‘a‘, ‘b‘, ‘c‘];
a.forEach(function(element) { console.log(element);} );
// logs each item in turn
时间: 2024-08-27 14:58:38

JS - 有序数列的相关文章

找出旋转有序数列的中间值python实现

题目给出一个有序数列随机旋转之后的数列,如原有序数列为:[0,1,2,4,5,6,7] ,旋转之后为[4,5,6,7,0,1,2].假定数列中无重复元素,且数列长度为奇数.求出旋转数列的中间值.如数列[4,5,6,7,0,1,2]的中间值为4.输入 4,5,6,7,0,1,2 输出 4 输入样例11,2,34,5,6,7,0,1,212,13,14,5,6,7,8,9,10输出样例1249 方法1 排序后直接取. def solution(line): #line = "4,5,0,1,2&qu

有序数列的二分搜索

二分查找 import java.util.*;public class HW3 { public static void main(String[] args) { Scanner in = new Scanner(System.in); //输入要查找的数 System.out.println("请输入要打印的数据:"); int number = in.nextInt(); Random rd = new Random(); //在数组中随机,注:范围是在打印时标示 int[]

LeetCode Summary Ranges (统计有序数列范围)

题意:给出个有序不重复数列(可能负数),用缩写法记录这个数列. 思路:找每个范围的起始和结束即可. 1 class Solution { 2 public: 3 vector<string> summaryRanges(vector<int>& nums) { 4 if(nums.empty()) return vector<string>(); 5 vector<string> vect; 6 for(int i=0; i<nums.size

多个有序数列中查找第k小值

问题描述:现有n个有序序列如(2,3,9),(3,5,11,23),(1,4,7,9,15,17,20),(8,15,35,9),(20,30,40),请求出第k小值. 问题分析:可用多路归并排序将所有序列进行排序后取第k个值,但是只要求求出第k小值将所有数组排序未免显得有点浪费,所以我们可以使用包含k个元素的堆完成,对于每组元素取出前k小的,依次进行比较,得到总的前k小 执行步骤: 一.建初堆:从第一组数中取出前k小的元素建初始大根堆(若不足k个则取全部元素), 二. 1 .补充堆:若堆中元素

【LeetCode】Search in Rotated Sorted Array——旋转有序数列找目标值

[题目] Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the array return its index, otherwise return -1. You may assume no d

logn+m复杂度找两个有序数列的中位数

class Solution { public: double fun(vector<int> nums1,int n,vector<int> nums2,int m,int k) { if(nums1.size()-n>nums2.size()-m) return fun(nums2,m,nums1,n,k); if(n==nums1.size()) return nums2[k-1+m]; if(k==1) return min(nums1[n],nums2[m]); i

两组有序数列的中位数

两组升序排列的数组A[m]和B[n], 求他们的中位数. 注意,中位数的概念哦-相信你会百度一下的- 格式: 第一行输入数字m,接下来一行输入数组A[m], 第三行输入数字n,第四行输入数组B[n],接下来输出中位数.两个数组的长度都不超过1000. 注意,需要保留5位小数哦-所以,你设计函数的时候请设计成double类型哦- 样例输入 1 3 5 1 2 4 5 6 样例输出 3.50000 package jsk; import java.util.Scanner; public class

JS 有序键值Map对的实现

构造: function Map() { this.keys = new Array(); this.data = new Array(); //添加键值对 this.set = function (key, value) { if (this.data[key] == null) {//如键不存在则身[键]数组添加键名 this.keys.push(value); } this.data[key] = value;//给键赋值 }; //获取键对应的值 this.get = function

两个有序数列的合并

题目描述 已知数组a中有m个按升序排列的元素,数组b中有n个按降序排列的元素,编程将a与b中的所有元素按降序存入数组c中. 输入 输入有两行,第一行首先是一个正整数m,然后是m个整数:第二行首先是一个正整数n,然后是n个整数,m, n均小于等于1000000. 输出 输出合并后的m+n个整数,数据之间用空格隔开.输出占一行. 样例输入 4 1 3 5 7 3 6 4 2 样例输出 7 6 5 4 3 2 1 提示 试图排序的孩子们要小心了~~~~~~ 1 # include <stdio.h>