1、手写一个计算器。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<div>
<div>
<span>数值:A</span>
<input type="number" v-model="Anumerical">
</div>
<div>
<span>数值:B</span>
<input type="number" v-model="Bnumerical">
</div>
</div>
<div>
<button @click="hanshu(1)">+</button>
<button @click="hanshu(2)">-</button>
<button @click="hanshu(3)">X</button>
<button @click="hanshu(4)">/</button>
<button @click="ling">重置</button>
</div>
</div>
<script src="./vue.js"></script>
<script>
var guan = new Vue({
el: '#app',
data: {
Anumerical: '',
Bnumerical: ''
},
methods: {
hanshu: function (z) {
if (this.Bnumerical) {
switch (z) {
case 1:
this.Anumerical = this.Anumerical * 1 + this.Bnumerical * 1
break;
case 2:
this.Anumerical = this.Anumerical - this.Bnumerical
break;
case 3:
this.Anumerical = this.Anumerical * this.Bnumerical
break;
case 4:
this.Anumerical = this.Anumerical / this.Bnumerical
break;
default:
break;
}
this.Bnumerical = ''
} else {
alert('请输入数值')
}
},
ling: function () {
this.Anumerical = '',
this.Bnumerical = ''
}
}
})
</script>
</body>
</html>
2、实现一个函数,对给定数组的value做去重后相乘,请尽量用原生方法实现! const array = [{value: 9}, {value: 2}, {value: 3}, {value: 3},{value: 5}, {value: 2}, {value: 5}]; 例如上面数组去重相乘结果为270:(9 * 2 * 3 * 5 = 270)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
const array = [
{ value: 9 },
{ value: 2 },
{ value: 3 },
{ value: 3 },
{ value: 5 },
{ value: 2 },
{ value: 5 },
]
function changeChong(arr) {
let newarr = []
for (const key in arr) {
newarr.push(arr[key].value)
}
var newArr2 = []
for (var i = 0; i < newarr.length; i++) {
if (newArr2.indexOf(newarr[i]) === -1) {
newArr2.push(newarr[i])
}
}
let a = 1
for (const key in newArr2) {
a *= newArr2[key]
}
return a
}
console.log(changeChong(array)) //270
</script>
</body>
</html>
3、给你2个数组a和b, 把2个数组合并, 返回合并后的数组 按 递减顺序 排列并过滤掉指定元素。 let arr1 = [1,8,3,10,3,2,9,2], arr2 = [2,5,6], element = 2 function concatArr(arr1,arr2,element){ } console.log(concatArr(arr1,arr2,element)) //[10,9,8,6,5,3,3,1]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
let arr1 = [1, 8, 3, 10, 3, 2, 9, 2]
let arr2 = [2, 5, 6]
let element = 2
function concatArr(arr1, arr2, element) {
let arr3 = arr1.push(...arr2)
let arr4 = []
arr1.forEach((v) => {
if (v != element) {
arr4.push(v)
}
})
for (var i = 0; i < arr4.length - 1; i++) {
for (var j = 0; j < arr4.length - 1 - i; j++) {
if (arr4[j] < arr4[j + 1]) {
var temp = arr4[j]
arr4[j] = arr4[j + 1]
arr4[j + 1] = temp
}
}
}
return arr4
}
console.log(concatArr(arr1, arr2, element)) //[10,9,8,6,5,3,3,1]
</script>
</body>
</html>
4、给定一个非空的数字数组,数组有且只有一个非重复项,实现一个方法获取落单项
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function getSingleNumber(numbers) {
var newsArr = [];
numbers.forEach(function (item, index) {
if (numbers.indexOf(item) == numbers.lastIndexOf(item)) {
newsArr.push(item);
}
})
return newsArr;
}
var a = getSingleNumber([1, 2, 1, 2, 0]); //0
console.log(a);
var b = getSingleNumber([0, 1, 0, 0]); //1
console.log(b)
var c = getSingleNumber([1, 2, 3, 1, 2]); //3
console.log(c);
var d = getSingleNumber([1, 2, 3, 1, 2, 2]); //3
console.log(d)
</script>
</body>
</html>
5、有这样一个字符串 "www.baidu.com?key=1&name=test1&name=test2&c#&city=%E6%9D%AD%E5%B7%9E",要求转化成 {"key":1,"name":['test1','test2'],"c":'',"city":'杭州'}*
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
function getUrlDataFN(urlStr) {
// 定义一个空对象以储存数据
const urlObj = {}
// 检查url中是否携带数据
if (urlStr.indexOf("?") === -1) return null
// 找到 '?' 对应的下标
const index = urlStr.indexOf("?") // index = 20
// 截取 '?' 后的内容
const dataStr = urlStr.substr(index + 1) // key=1&name=test1&name=test2&c#&city=%E6%9D%AD%E5%B7%9E
// console.log(dataStr)
// 通过 '&' 将字符串分割成数组
const dataArr = dataStr.split("&") // ['key=1', 'name=test1', 'name=test2', 'c#', 'city=%E6%9D%AD%E5%B7%9E']
// console.log(dataArr)
// 遍历字符串分割后的数组
dataArr.forEach((str) => {
// console.log("str", str)
// 判断数组内的字符串是否有 '='
if (str.indexOf("=") === -1) {
// 如没有 '=' , 则将此字符串作为对象内键值对的键, 键值对的值为 ''
urlObj[str] = "" // { c: '' }
} else {
// 如果有 '='
// 通过 '=' 将此字符串截取成两段字符串(不推荐使用 split 分割, 因为数据中可能携带多个 '=' )
const innerArrIndex = str.indexOf("=")
// console.log("index", innerArrIndex)
const key = str.substring(0, innerArrIndex)
// console.log("key", key)
const value = str.substr(innerArrIndex + 1)
// console.log("value", value)
// Js判断数组或对象中的key是否存在
if (!urlObj.hasOwnProperty(key)) {
// 以截取后的两段字符串作为对象的键值对 decodeURIComponent将uri格式转换为汉字
urlObj[key] = decodeURIComponent(value) // {a: '1', b: '2', c: '', d: 'xxx'}
} else {
// console.log("测试", urlObj[key])
var oldObj = urlObj[key]
// console.log("老的", oldObj)
// 判断是否为数组
if (!(oldObj instanceof Array)) {
// 不是转换为数组
oldObj = [urlObj[key]]
}
oldObj.push(decodeURIComponent(value))
urlObj[key] = oldObj
}
}
// console.log(urlObj)
})
// 返回对象
// console.log(urlObj)
return urlObj
}
// console.log(escape("北京"))
// encodeURIComponent()将汉字转化为utf-8的格式的uri
console.log(encodeURIComponent("北京"))
let url =
"http://www.baidu.com?key=1&key=1&key=3&key=4&name=test1&name=test2&name=test3&c#&city=%E6%9D%AD%E5%B7%9E&city=%E5%8C%97%E4%BA%AC"
let result = getUrlDataFN(url)
console.log(result)
</script>
</body>
</html>
6、从一个树状数据结构中,找出值最大的一个节点
方法一:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
<script>
var tree = {
id: "i1",
value: 12,
left: {
id: "i3",
value: 63,
left: {
id: "i8",
value: 222
},
right: {
id: "i91",
value: 22
}
},
right: {
id: "i14",
value: 26
}
}
var list = []
function www(tree) {
for (var key in tree){
if(key==='value'){
list.push({
value:tree[key],
id:tree.id
})
}
if(key==='left'){
www(tree[key])
}
if(key==='right'){
www(tree[key])
}
}
}
www(tree)
var max2 = list.sort(function(a,b){
return b.value-a.value;
})[0];
console.log(max2)
console.log(list,'list')
</script>
</html>
方法二:
const Tree = {
id: "i1",
value: 12,
left: {
id: "i3",
value: 63,
left: {
id: "i8",
value: 222
},
right: {
id: "i91",
value: 22
}
},
right: {
id: "i14",
value: 26
}
};
let maxNode = {
value: '',
id: '',
}
function findMaxNode(tree) {
for(let i in tree){
if(Object.prototype.toString.call(tree[i]) === '[object Object]'){
findMaxNode(tree[i])
}else{
if(i == 'value'){
if(tree.value > maxNode.value){
maxNode.value = tree.value;
maxNode.id = tree.id
}
}
}
}
}
findMaxNode(Tree)
console.log(maxValue)
7、翻转一个整数(不使用APi)
方法一:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
function fanzhuan(n) {
let plusOrMinus = 1
if (n == 0) return 0
if (n < 0) {
plusOrMinus = -1
n = -n
}
let jilu = 0 //记录每次计算的余数
let jieguo = 0
while (n > 0) {
jilu = n % 10 //取余记录
n = (n - jilu) / 10 //取余后减去上次取余的结果,然后除10,继续循环的主体
jieguo = jieguo * 10 + jilu //取余相加
}
let res = jieguo * plusOrMinus
return res
}
console.log(fanzhuan(0))
</script>
</body>
</html>
方法二:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
let reversal = (num)=>{
if (num == 0) {
return 0
}
let flag = 1
if (num < 0) {
flag = -1
num = -num
}
let newNum = 0
while (num) {
newNum = newNum * 10 + num % 10
num = Math.floor(num / 10)
}
return flag * newNum
}
console.log(reversal(-3453))
</script>
</body>
</html>