求1-100之间的和?
var num = 0;
方法1:
for(var i = 0;i<=100;i++){num += i;}
方法2:
var i = 0;
while(i<=100){num +=i; i++}
方法3:
var i = 0;
do{num += i;i++}
while(i<=100);
console.log(num) ==>5050;
求var arr = [2,4,6]的和?
方法1:
var num = 0;
for(var i = 0;i<arr.length;i++){
num += arr[i];
}
方法2:
var fn1 = (a,b)=>a+b;
var newArr = arr.reduce(fn1,0);
优化方法2:
arr.reduce((a,b)=>{return a + b})
方法3:同方法2
var fn1 = function(a,b){
return a+b;
}
var newArr = arr.reduce(fn1,0);
console.log(arr);
实现9*9乘法表?
var p = "";
for(var i = 1;i<=9;i++){
for(var j = 1;j<=i;j++){
p += "<p>" +i+ "*" +j+ "=" +i*j+"</p>"
}
}
document.write(p);
利用事件冒泡实现数组排序?
var arr = [1,3,4,6,11,14,10,5,45,23,67];
方法1:
var newArr = 0;
for(var i = 0;i<arr.length;i++){
for(var j = i+1;j<arr.length;j++){
if(arr[i] > arr[j]){ //从小到大
newArr = arr[i];
arr[i] = arr[j];
arr[j] = newArr;
}
}
}
console.log(arr);
方法2:
arr.sort((a,b)=>a-b); //从小到大
arr.sort((a,b)=>b-a); //从大到小
数组去重?
var arr = [1,2,1,4,2,2,5,6,3];
方法1:
var num = [];
for(var i = 0;i<arr.length;i++){
if(num.indexOf(arr[i]) == -1){
num.push(arr[i]);
}
}
console.log(arr);
方法2:
var newArr = new Set(arr);
var num2 = Array.from(newArr);
console.log(num2);
方法3:
[...new Set(arr)]
遍历对象:
删除对象的value值为空或者为undefined;
var ss;
var result = {
'a':'as',
'b':'',
'r':ss,
}
for(let i in result){
if(result[i] === undefined || result[i] === ""){
delete result[i]
}
}
conssole.log(result[i]) //{'a':'as'}
//动态取对象键;
1、obj[Object.keys(obj)[0]]
2、for in
//判断数组里面的值都是一个确定的数
var arr = [1,1,1,2,3,4,5,0,0,0];
!arr.some(item => item !=='那个确定的数') //返回布尔值
方法2:
const arr = [0, 0, 0, 0]
const temp = [...new Set(arr)]
const res = temp.length === 1 && temp[0] === 0
console.log(res)
方法3:
var status=false
var arr=[0,0,0,0,0,0,0] //如果空数组不能算输出正确 下一行代码换成 arr.join('') || 1
var str=arr.join('')
var val=Number(str)
val===0 && status=true
console.log(status)
方法4:
let arr = [0, 0, 0, 0];
eval(arr.join('+')) == 0;
方法5:
let reg = /^0+$/g;
let arr = [0, 0, 0, 0];
reg.test(arr.join(''));
方法6:
let arr=[0,0,0,0,0,0,0];
console.log(arr.every(item=>item===0))
方法7:
var a = [0, '0', 0, 0, '0', 0, 0, 0]
console.log(!a.find(i => i!= 0)) // true
判断数组元素有两个或者两个以上的元素
for(var i = 0;i<lisRight.length;i++){
for(var j = i+1;j<lisRight.length; j++){
if($(lisRight[i]).attr('id') == $(lisRight[j]).attr('id')){
alert('有相同的元素!!!')
}
}
}
对象中的value值为空,删该项
function objNull(obj){
for(let i in obj){
obj[i]==""?delete obj[i]:obj[i]
}
return obj;
}
测试:========》
var ss = 12,dd = '';
var result = {
'a':ss,
'b':dd,
'ff':15,
'gg':""
}
var test = objNull(result);
//在原有数组基础上加1;
//Array.from()参数1,数组,参数2,函数(不能使用箭头函数,没搞明白),参数3,调用函数的this指向
var arrs = [1,2,3,4,5];
let obj = {mapFun:e=>{return e + 1}};
var newArr = Array.from(arrs,function(x){return this.mapFun(x)},obj);
:字符排序:
function pinyin(str){
//Error type verification
if(Array.isArray(str) == false || str === null || str.length < 0)throw new Error('Parameter type error');
var newArr = [];
//String ASCII transformation
for(var i = 0;i<str.length;i++){
newArr.push(arr[i].charCodeAt());
};
//ASCII Sort
let sortStr = newArr.sort((a,b)=>{return a-b});
newArr = [];
//The sorted ASCII code is converted into the corresponding string
for(var j = 0;j<sortStr.length;j++){
newArr.push(String.fromCharCode(sortStr[j]))
};
return newArr;
}
//不改变原始数组
arr.sort(function(a,b){return a.localeCompare(b)})
arr.sort(function(a,b){return a.localeCompare(b,'zh-CN')})
//不借助第三方变量,变量值进行交换
// function swap(a,b){
// b = b-a;
// a = a+b;
// b = a-b;
// return [a,b]
// }
// var aa = 4,bb = 2;
// console.log(swap(aa,bb))
//二分法查找
function binarySearch(A, x) {
var low = 0,high = A.length -1
while (low <= high) {
var mid = Math.floor((low + high) / 2)
if (x == A[mid]) {
return mid
}
if (x < A[mid]) {
high = mid -1
} else {
low = mid + 1
}
}
return -1
}
console.log(binarySearch([1,2,3,42,5,6,3,7,6,78,0,12],1)) //0
//快排
function quickSort(arr) {
if (arr.length <= 1) {
return arr
}
var index = Math.floor(arr.length / 2)
var key = arr.splice(index,1)[0]
var left = [],right = []
arr.forEach(function(v){
v <= key ? left.push(v) : right.push(v)
})
return quickSort(left).concat([key],quickSort(right))
}
var arr = [4,3,5,6,2,67,12,0,67,55];
console.log(quickSort(arr));
//找出数组差值
function sorts(arr1,arr2){
return Math.max.apply(null,arr1) - Math.min.apply(null,arr2);
}
console.log(sorts([12,3,42,30],[12,3,4,56,34])) //39;
//数组原型去重
Array.prototype.unique = function() {
var result = []
this.forEach(function(v){
if(result.indexOf(v) < 0) {
result.push(v)
}
})
return result
}
var arr = [1,2,3,4,5,32,4,65,2,1,67,2,2,2,2];
console.log(arr.unique())
//查询字符串中出现最多的字符
function findMaxDuplicateChar(str) {
if (str.length == 1) {
return str
}
let charObj = {}
for(let i = 0; i< str.length; i++) {
if (!charObj[str.charAt(i)]) {
charObj[str.charAt(i)] = 1
} else {
charObj[str.charAt(i)] += 1
}
}
let maxChar = ''
maxValue = 1
for(var k in charObj) {
if (charObj[k] >= maxValue) {
maxChar = k
maxValue = charObj[k]
}
}
return maxChar
}
console.log(findMaxDuplicateChar('aaaaasdsa啊啊啊啊啊dsddhhhh'))
------------
//数组扁平化处理
let arr =[1,2,[4,2,3]]
1、arr.flat(Infinity)
2、arr.toString.split(',')
3、arr.join(',').split(',')
4、function ar(_arr){
let result = [];
_arr.forEach(item=>{
if(Array.isArray){
result = result.concat(ar(item))
}else{
result.push(item)
}
})
}
function fn(arr){
return arr.reduce((result,item)=>{
return result.concat(Array.isArray(item)?fn(item):item)
},[])
}
...
//对象value添加引号
let obj = '{as s:12,gfg k:44}';
let newObj={};
let aaa = obj.replacr(/{|}|\s*/g,'').split(',');
aaa.foreach(el=>{
let i = el.indexOf(':');
newObj[el.substr(-,i)] = el.substr(i+1)
})
//求n个字符串
String.prototype.times = function(n){
return Array.prototype.join.call({length:n+1},this)
}
//打印100个hello
var ss = 'hello';
ss.times(100)//...
// 将对象转数组//[{},{}]
第一种:var obj = {'a':1,'b':2,'test':112},
arr = Object.entries(obj),
newArr = [];
arr.forEach(el=>{
newArr.push({[el[0]]:el[1]});
})
第二种:Object.keys(obj).forEach(v=>{
console.log(obj[v])
let o = {};
o[v] = obj[v];
newArr.push(o);
})
js基础算法
于 2019-04-12 10:09:04 首次发布