Array.prototype.mypop
let arr = [1,58,99,63,4];
console.log(arr.__proto__);
// 声明一个数组构造函数原型方法cls
Array.prototype.mypop = function(){
// 数组长度-1实现删除末尾元素
let at = this[this.length-1]
if(this.length != 0){
this.length=this.length-1;
return at
}else{
return undefined
}
}
console.log(arr,arr.pop())
Array.prototype.mypush
//重构数组push方法 修改原数组返回修改后数组长度
let arr =[23,55,99,2,4];
/* let arr1= arr.push('7');
console.log(arr1,arr) */
//修改原数组,并返回数组长度
Array.prototype.mypush = function(...arguments){
for(let i=0;i<arguments.length;i++){
this[this.length] = arguments[i]
}
return this.length
}
console.log(arr,arr.mypush('tom','tea'))
Array.prototype.myshift
var arr = [1, 2, 5, 6, 3, 88]
Array.prototype.myshift = function () {
var first = this[0]
for (let i = 1; i < this.length; i++) {
this[i] = this[i + 1]
}
this.length--
return first
}
console.log(arr, arr.myshift())
Array.prototype.myunshift
let arr =[23,55,99,2,4];
Array.prototype.myunshift=function(...arguments){
/* let arr1 = [];
let length = arguments.length+this.length
for(let i =0;i<arguments.length;i++){
arr1[arr1.length] = arguments[i];
}
for(let j=0;j<this.length;j++){
arr1[arr1.length]=this[j]
} */
let length = arguments.length+this.length
for(let i = length-1;i>=0;i--){
if(i>arguments.length-1){
this[i] = this[i-arguments.length]
}else{
this[i] = arguments[i]
}
}
return length
}
console.log(arr,arr.myunshift(5,'jerry'))
Array.prototype.myreverse
// reverse()颠倒数组元素顺序
let arr = [85,99,552,4,3]
let rev = arr.reverse()
console.log(arr,rev);
// reverse()返回翻转后的新数组,修改原数组,不参数
Array.prototype.myreverse = function(){
for(let i = 0;i<=(this.length/2);i--){
this[i] = this[this.length-1-i]
}
return this
}
console.log(arr,arr.myreverse());
Array.prototype.myforEach
// 迭代方法重构
// forEach
let arr = [1, 2, 3, 4, 5, 6];
/* arr.forEach(function(item,index,obj){
console.log(item);
console.log(index);
console.log(obj);//arr
// console.log(arr);
}) */
Array.prototype.myforEach = function (callback) {
for (var i = 0; i < arr.length; i++) {
callback(arr[i], i, arr)
}
}
arr.myforEach(function (item, index, arr) {
console.log(item, index, arr)
});
Array.prototype.myevery
var arr = [1,2,3,4,56,-1];
var res = arr.every(function(item,index,arr){
return item>0
});
console.log(arr,res);
Array.prototype.myevery = function(callback){
for(let i =0 ;i<arr.length;i++){
if(!callback(arr[i],i,arr)){
return false
}
}
return true
}
console.log(arr,arr.myevery(function(item,index,arr){
return item > 0
}))
Array.prototype.mysome
let arr = [25,66,4,23,89];
let res = arr.some(function(item,index,arr){
// 条件的判断
return item > 6
})
console.log(arr,res)
Array.prototype.mysome = function(callback){
for(let i =0;i<arr.length;i++){
// 只要有一个满足条件true
if( callback(arr[i],i,arr) ){
return true
};
return false
}
}
console.log(arr,arr.mysome(function(item,index,arr){
// 条件的判断
return item > 6
}))
Array.prototype.myfilter
var arr = [1,2,3,4,5,6];
var res = arr.filter(function(item,index,arr){
return item>2
})
console.log(arr,res)
Array.prototype.myfilter = function(callback){
// 判断每一项
var newarr = []
for(let i =0;i<arr.length;i++){
if(callback(arr[i],i,arr)){
newarr[newarr.length] = arr[i]
}
}
return newarr
}
console.log(arr,arr.myfilter(function(item,index,arr){
return item > 2
}))
Array.prototype.mymap
var arr = [1,2,3,4,5,99];
var res = arr.map(function(item,index,arr){
return item + 5
})
console.log(arr,res);
Array.prototype.mymap = function(callback){
let newarr = []
for(let i = 0;i<arr.length;i++){
newarr[newarr.length] = callback(arr[i],i,arr);
}
return newarr
}
console.log(arr,arr.mymap(function(item,index,arr){
return item + 5
}))
题目1:给定一个数组(如[2, 7, 11, 15]),求任意两个数组元素(不能是同一个数组元素)值的和为某一个指定值(如9)的数组下标。
例如 给定[2, 7, 11, 15], target = 9,求符合条件数组元素下标return [0,1]
// 给定数组
const arr = [2,7,11,15];
// 指定值9
function sum(num){
// 使用冒泡 外层3次
for(let i =0;i<arr.length-1;i++){
// 内层动态改变次
for(let j=1;j<arr.length-i;j++){
// k=第二个数的下标
let k = j+i;
if((arr[i]+arr[k]) == num){
console.log(i,k)
return i,k
}
}
}
}
sum(9);
sum(26);
sum(18);
sum(17);
题目2:封装函数实现10得阶乘 最终输出10=10*9*8*7*6*5*4*3*2*1=3628800
// 定义全局变量sum
let sum = 1;
// 定义函数
function Jiec(num){
// 阶层
sum *= num;
console.log(sum);
num--;
if(num>0){
// 递归
Jiec(num);
}else{
return sum
}
}
Jiec(10)
题目3:给出一个字符串 输出最长单词的长度(和数组一样可以使用for循环遍历,也可以通过length属性获取长度)
let str = 'i love china i not english chian';
// 字符串转数组
let arr = str.split(' ');
console.log(arr);
let max =arr[0];
//查找最大值
for(let j=1;j<arr.length;j++){
if(max.length>arr[j].length){
max = max
}else{
max = arr[j]
}
}
// 输出
console.log(max);
题目4:100到1000以内的水仙花数 个位立方+十位立方+百位立方=水仙花数
for(let i=100;i<1000;i++){
let a = parseInt(i/100);
let b = parseInt(i/10%10);
let c = parseInt(i%10);
if(a*a*a+b*b*b+c*c*c == i){
// Math.pow(a,n) 求a的n方
console.log(i);
}
}
题目5:反转字符串,将字符串str = 'i love china' 反转为china love i
let str = 'i love china';
// 使用.split方法将字符串转为数组
let arr = str.split(' ');
// 查看获取的数组arr
console.log(arr);
// 数组翻转方法.reverse()
arr = arr.reverse();
// 查看翻转数组
console.log(arr);
// 数组转字符串方法.join(' ')以空格分隔
arr = arr.join(' ');
// 打印输出
console.log(arr);
题目6:求1-1000完美数,一个数本身等于它的因子之和 6 = 1 + 2 + 3
// 1.遍历循环1~1000
for (let i = 1; i <= 1000; i++) {
// 6.创建数组
let arr = [];
// 2.获取i的因子
for (let j = 1; j <= i; j++) {
// 3.判断j是否为i的因子
if (i % j == 0) {
// 4.去除i本身
if (i != j){
// 5.将因子放入数组
arr.push(j);
}
}
}
let sum = 0;
for(let k=0;k<arr.length;k++){
// 7.遍历数组和判断是否等于i
sum += arr[k]
}
if(sum == i){
// 8.打印输出i是完美数
console.log(i+'是完美数')
}
}
题目7:组合1-1000以内的三位数,要求个位、十位、百位各不相同
//1.1~1000三位数 即100~1000
for(let i=100;i<=1000;i++){
// 2.百位数
let a = parseInt(i/100);
// 3.十位数
let b = parseInt((i/10)%10);
// 4.个位数
let c = parseInt((i/1)%10);
if(a != b&&b != c&&c != a){
// 判断2,3,4各不相同输出i
console.log(i);
}
}
题目8:随机生成1-9的三位数,要求个位、十位、百位各不相同
let arr = [];
let str = '';
// 1.循环无限产生1~9随机数字
for (let i = 1; 1 ; i++) {
let j = Math.floor((Math.random() * 9) + 1); 8
// 2.如果数组为空,直接插入
if (arr.length == 0) {
arr.push(j); //3.如果数组长度为1 判断j是否不等于数组元素 是则插入
}else if(arr.length == 1){
if(arr[0] != j){
arr.push(j)} //4.如果数组长度为2 判断j是否不等于数组元素,是则插入
}else if(arr.length == 2){
if(arr[0] != j){
if(arr[1] != j){
arr.push(j)
}
} //5.如果数组长度为3 跳出循环
}else if(arr.length == 3){
break;
}
} //字符串拼接
str = arr.join('')
console.log(str);