golove

javaScript常用方法

有 N 人看过

使用给定的参数对句子执行一次查找和替换,然后返回新句子

function myReplace(str, before, after) {
    if (before.charAt(0) >= 'A' && before.charAt(0) <= 'Z') {
        //将after的首字母变为大写
        after = after.replace(after.charAt(0), after.charAt(0).toUpperCase());
        str = str.replace(before, after);
    } else {
//将after的首字母变为小写
        after = after.replace(after.charAt(0), after.charAt(0).toLowerCase());
        str = str.replace(before, after);
    }
    return str;
}
console.log(myReplace("Let us get back to more Coding", "Coding", "algorithms"))

重复输出字符串

function repeat(str, num) {
    if (num > 0) {
        var newstr = []
        for (let i = 0; i < num; i++) {
            newstr[i] = str
        }
        console.log(newstr.join(""));
    } else {
        console.log(" ");
    }
}

repeat("i love you ", 3);

字符串超出隐藏

function truncate(str, num) {
    let newstr = str.split("");

    if (newstr.length > num && num > 3) {
        console.log(newstr.slice(0, num - 3).join("") + '...');
    } else if (num <= 3) {
        console.log(newstr.slice(0, num).join("") + '...');
    } else if (newstr.length === num) {
        console.log(newstr.join(""));
    }

    // console.log(newstr.slice(0, num).join("") + '...')
    // return newstr1;
}

truncate("Walking on water and developing software from a specification", 36)

把一个数组分成子数组为n的一个2维数组

function chunk(arr, size) {
    var len = arr.length;
    var n = len / size;
    var arry = [];

    for (var i = 0; i < n; i++) {
        arry[i] = arr.slice(size * i, size * (i + 1))
    }
    // console.log(arr.slice(2, 4))
    console.log(arry)
}
chunk([0, 1, 2, 3, 4, 5], 3);

如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。

function mutation(arr) {
    let arry = [];
    let arr1 = arr[1].toLowerCase().split("")
    let arr0 = arr[0].toLowerCase()
    arr1.forEach((e, i) => {

        if (arr0.indexOf(e) >= 0) {
            arry[i] = true;
            console.log(e, true)
        } else {
            console.log(e, false)
            arry[i] = false;
        }
    });
    // return arr[0].toLowerCase()
    if (JSON.stringify(arry).indexOf('false') >= 0) {
        return false;
    } else {
        return true;
    }
    // return arr[1].toLowerCase().split("")

}

yy = mutation(["floor", "for"]);

实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值

function destroyer() {
    var argu = arguments
    var arr1 = argu[0];
    var arr2 = arr1.filter(function (val) {
        var a = true;
        for (var i = 1; i < argu.length; i++) {
            if (val === argu[i]) {
                a = false;
            }
        }
        return a;
    })
    return arr2
}

console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));

先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。

function where(arr, num) {
    function compare(a, b) {
        return a - b;
    }
    arr.push(num);
    arr.sort(compare);
    return arr.indexOf(num);
}

console.log(where([2, 10, 20, 3], 5))

下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码。移位密码也就是密码中的字母会按照指定的数量来做移位。

// 普通方法
function rot13(str) { // LBH QVQ VG!
    var yy = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
    var ystr = yy.join("").replace(",", "");
    let n = [];
    str.toUpperCase().split("").forEach(e => {
        if (e === "!" || e === '?' || e === " " || e === ".") n.push(e)
        n.push(ystr.indexOf(e))
    })
    let newstr = [];
    n.forEach((e, i) => {
        if (e === "!" || e === '?' || e === " " || e === ".") {
            newstr[i] = e;
        } else if (e >= 0) {
            newstr[i] = yy[e + 13];
            if (e + 13 > 25) {
                newstr[i] = yy[13 - (26 - e)]
            }
        }
    })
    return newstr.join("");
}

// charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
// (字符串中第一个字符的下标是 0。如果 index 是负数,或大于等于字符串的长度,则 charCodeAt() 返回 NaN。)
// fromCharCode() 可接受一个指定的Unicode 值,然后返回一个字符串。
// (该方法是 String 的静态方法,字符串中的每个字符都由单独的数字 Unicode 编码指定。
// 它不能作为您已创建的 String 对象的方法来使用。因此它的语法应该是 
// String.fromCharCode(),而不是 myStringObject.fromCharCode()。)

function rot13(str) { // LBH QVQ VG!
    var str1 = [];
    for (var i = 0; i < str.length; i++) {
        var num = str[i].charCodeAt();
        if (num >= 65 && num <= 77) {
            num += 13;
        } else if (num > 77 && num < 91) {
            num -= 13;
        }
        str1.push(String.fromCharCode(num));
    }
    return str1.join("");
}


console.log(rot13("GUR DHVPX OEBJA QBT WHZCRQ BIRE GUR YNML SBK."))

求任意两数之间所有数之和

function sumAll(arr) {
    var i = 0;
    let a = Math.max(...arr);
    let b = Math.min(...arr);

    for (; b < a + 1; b++) {
        i = i + b
    }
    console.log(i)
}

sumAll([56, 10]);

数组去重

function diff(arr1, arr2) {
  var newArr = [];

  newArr = Array.from(new Set([...arr1, ...arr2]));

  console.log(newArr);
}

diff(["diorite", "andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"]);

对象数组去重

const lists = [{ id: 1, a: 1 }, { id: 2, a: 2 }, { id: 3, a: 3 }, { id: 4, a: 4 }, { id: 1, a: 1 }, { id: 2, a: 2 }, { id: 1, a: 1 }, { id: 2, a: 2 }, { id: 3, a: 3 }, { id: 4, a: 4 }, { id: 1, a: 1 }, { id: 2, a: 2 }];
const lists2 = [{ id: 1, a: 1 }, { id: 2, a: 2 }, { id: 3, a: 3 }, { id: 4, a: 4 }, { id: 1, a: 1 }, { id: 2, a: 2 }];

const result = lists.reduce((prev, cur) => {
  const ids = prev.map(item => item.id)
  return ids.includes(cur.id) ? prev : [...prev, cur]
}, []);
console.log(result)

比较两个数组,然后返回一个新数组,该数组的元素为两个给定数组中所有独有的数组元素。换言之,返回两个数组的差异。

function diff(arr1, arr2) {
  var newArr = [];
  var arr3 = [...arr1, ...arr2]
  // var arr3 = arr1.concat(arr2); //将arr1和arr2合并为arr3
  function isContain(a) {
    //找出arr3中不存在于arr1和arr2中的元素
    return arr1.indexOf(a) == -1 || arr2.indexOf(a) == -1;
  }
  newArr = arr3.filter(isContain);
  console.log(newArr);
}

diff(["andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"])

将给定的数字转换成罗马数字。

function convert(num) {
  var num0 = ["1", "4", "5", "9", "10", "40", "50", "90", "100", "400", "500", "900", "1000"];
  var num0R = num0.reverse();
  var num1 = ["I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"];
  var num1R = num1.reverse();
  var numCon = [];
  num0R.forEach(function (value, index, arr) {
    while (num >= value) { //条件循环
      numCon.push(num1R[index]);
      num -= value;
    }
  });

  return numCon.join("");
}

console.log(convert(222));

将给的的数字转换成中文

function convert(num) {
  let changeNum = [ '零', '一','二','三','四','五','六', '七','八', '九' ];
  let unit = ['', '十', '百', '千', '万'];
  num = parseInt(num)
  let getWan = temp => {
    let strArr = temp
      .toString()
      .split('')
      .reverse()
    let newNum = ''
    for (var i = 0; i < strArr.length; i++) {
      newNum =
        (i == 0 && strArr[i] == 0
          ? ''
          : i > 0 && strArr[i] == 0 && strArr[i - 1] == 0
            ? ''
            : changeNum[strArr[i]] + (strArr[i] == 0 ? unit[0] : unit[i])) +
        newNum
    }
    return newNum
  }
  let overWan = Math.floor(num / 10000)
  let noWan = num % 10000
  if (noWan.toString().length < 4) {
    noWan = '0' + noWan
  }
  return overWan ? getWan(overWan) + '万' + getWan(noWan) : getWan(num)
}

遍历一个对象数组(第一个参数)并返回一个包含相匹配的属性

function where(collection, source) {
  var arr = [];
  // What's in a name?
  var sourceArr = Object.keys(source);
  arr = collection.filter(function (obj) {
    for (var i = 0; i < sourceArr.length; i++) {
      if (obj[sourceArr[i]] !== source[sourceArr[i]]) {
        return false;
      }
    }
    return true;
  });
  console.log(arr);
}

where([{
  first: "Romeo",
  last: "Montague"
}, {
  first: "Mercutio",
  last: null
}, {
  first: "Tybalt",
  last: "Capulet"
}], {
  last: "Capulet"
});

给定一个字符串返回对象数组中包含该字符串的对象

let str = 'MOTI';
let data = [
    { technology: 'CHARACTER', score: -1, text: 'sfoefjlasdoejfoausfe' },
    { technology: 'PRESSURE_RELIEF', score: 2, text: '123qw' },
    { technology: 'SUPPORT', score: 3, text: '123qw' },
    { technology: 'MOTION_ISOLATION', score: 2, text: '123qw' },
    { technology: 'TEMPERATURE_MANAGEMENT', score: -1, text: '123qw' },
    { technology: 'COMFORT', score: 2, text: 'szyy' }
];
let result = data.filter(function (el) {
    return el.technology.indexOf(str) > -1 || el.text.indexOf(str) > -1;
});

console.log(result);
Javascript
function confirmEnding(str, target) {
    var n = target.split("").length;
    var newstr = str.split(" ").join("");
    if (newstr.substr(-n) === target) {
        console.log(newstr.substr(-n));
        // return true;
    } else {
        //return false;
        console.log(newstr.substr(-n));
    }
}

confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification");

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。