获得字符串第一个字符和最后一个字符及扩展

			var str = "Hello World";
			console.log(str.substr(0,1));//H
			
			
			console.log(str.substr(-1));//d

2018/04/08 追加:

如果字符串是一个链接,想要获得图片参数,先获取最后5个字符

再截取第一个字符(适用于git参数只有一个时且图片名称为一个字符的时候)

                var str2 = "http://www.xxxx.com?imgsrc=1.jpg"; 
		console.log(str2.substr(-5));                         //1.jpg
		console.log(str2.substr(-5).substr(0,1));             //1

2018/04/10追加

通过下标找到对应的字符

var str="大家好,我是东,我来自南方。"
console.log(str[6]);    //东

通过字符找到对应的下标

var str='大家好,我是东,来自南方。';
var n=str.indexOf("东");
console.log(n+1);       //7         从1开始算起第几位,没有查找到这个字符的时候为n为-1

通过“,”将字符串分割成数组

var str="a,b,c,d,e,f";
var arr=str.split(",");
console.log(arr)          //["a", "b", "c", "d", "e", "f"]

2019/07/17中途追加
通过toString将数组转行承字符串


2018/05/12追加

获得特殊字符前面或后面的所有字符

	var str="item/jsonitem/httsdh.txt";  
	var strindex=str.indexOf(".");

	var data1 = str.substr(0,strindex);
	console.log(data1)   //item/jsonitem/httsdh
	
	var data2 = str.substr(strindex,str.length);
	console.log(data2)   //.txt
	
	var data3 = str.substr(strindex+1,str.length);
	console.log(data3)   //txt

2018/06/20追加

去掉所有的引号

var reg = new RegExp('"',"g");  
str = str.replace(reg, "");  

let arr=[]
let str = this.Imagessss
let newstr = str.replace(/http:\/\/xxxx.com/g,"")
arr=newstr.split(",");

Imagessss字符串格式有http和没有http的数据都统一格式

2019/05/21追加

通过“ ”将字符串分割成数组

var str="abcdef";
var arr=str.split("");
console.log(arr)        //["a", "b", "c", "d", "e", "f"]

2020/11/18追加 (splice有三个参数)

通过splice删除数组中某一项或多项

 通过splice替换数组中某一项或多项

获取所有属性的值(前4个字母):

<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="UTF-8" />
</head>
<body>
	<p val = 'data-name'>小明</p>
	<p val = 'data-age'>22</p>
	<p val = 'sex'>男</p>
	<script src="jquery.min.js"></script>
	<script>
		var arr=[];
		$('p').each(function(){
			arr.push($(this).attr('val').substr(0,4))
		})
		console.log(arr);   //["data", "data", "sex"]
	</script>
</body>
</html>

获取所有属性的值为data的文本(前4个字母):

<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="UTF-8" />
</head>
<body>
	<p val = 'data-name'>小明</p>
	<p val = 'data-age'>22</p>
	<p val = 'sex'>男</p>
	<script src="jquery.min.js"></script>
	<script>
		var arr=[];
		var v = '';
		$('p').each(function(){
			v=$(this).attr('val').substr(0,4);
			if(v == 'data'){
				arr.push($(this).text())
			}
		})
		console.log(arr);   //["小明", "22"]
	</script>
</body>
</html>

2019/11/12追加
       两个数组里面相同的都去掉

2019/11/27追加
数组中,只去掉name字段重复的

2020/03/16追加

        parms:{
			"namespace": "teas.jwgl.bjxygl",
			"pageName": "edit",
			"data": {}
		}

		//parms.data最后需要转成“字符串”传到后台,赋值的时候需要转成“json”状态,然后赋值

        let type = dsf.type(this.parms.data);
		this.parms.data["_id"] = this.messdata._id;
		if(type === 'object'){
			this.parms.data = JSON.stringify(this.parms.data)//转字符串
		}
        this.dsf.http.post('teas/mobile/meta/persistData', _this.parms).done((res) => {
        	if(res.success){
        		this.dsf.layer.toast(res.message);
        	}else{
        		this.dsf.layer.toast(res.message);
        	}
        	_this.parms.data = JSON.parse(_this.parms.data);//转json
        }).error((res) => {
          this.dsf.layer.toast(res.message);
        })

 2020/04/03  追加
用charAt()获取字符串中的字符(有些时候可以代替多层if(){}else if(){}   和switch_case )

function returnWeekday (){
	return "今天是星期" + "日一二三四五六".charAt ( new Date().getDay() ); 
} 
console.log( returnWeekday() ); 

2020/08/08 追加

  1、获取地址的参数

function UrlSearch() {
	var name, value;
	var str = location.href; //取得整个地址栏
	var num = str.indexOf("?")
	str = str.substr(num + 1); //取得所有参数 stringvar.substr(start [, length ]
			
	var arr = str.split("&"); //各个参数放到数组里
	for(var i = 0; i < arr.length; i++) {
		num = arr[i].indexOf("=");
		if(num > 0) {
			name = arr[i].substring(0, num);
			value = arr[i].substr(num + 1);
			this[name] = decodeURI(value);
		}
	}
}
var Git = new UrlSearch(); //实例化
console.log(Git.name);  // dong

效果 

2、如果在iframe页面中执行,需要修改成获取父级的整个地址栏

//iframe中获取父级地址栏的参数值
function UrlSearch() {
	var name, value;
	var str = window.parent.document.location.href; //取得整个父级地址栏
	var num = str.indexOf("?")
	str = str.substr(num + 1); //取得所有参数 stringvar.substr(start [, length ]
			
	var arr = str.split("&"); //各个参数放到数组里
	for(var i = 0; i < arr.length; i++) {
		num = arr[i].indexOf("=");
		if(num > 0) {
			name = arr[i].substring(0, num);
			value = arr[i].substr(num + 1);
			this[name] = decodeURI(value);
		}
	}
}
var Git = new UrlSearch(); //实例化
console.log(Git.age);  // 18

2021/05/10 追加

    编码之后的字符串重新解析成对象数组

事项相关方法

decodeURI("","UTF-8");
unescape();
JSON.parse();

var Group = dsf.getCookie("allGroup");
var newGroup = unescape(Group);
var garr=JSON.parse(newGroup)
var glist = [];
for(var i=0;i<garr.length;i++){
    if(glist.indexOf(garr[i].code) == -1){
        glist.push(garr[i].code)
    }
    
}
//如果有001,并且条数大于1才显示,其他都不显示
if(glist.indexOf('001')!=-1 && glist.length>1){
    console.log('显示');
}else{
    console.log('隐藏')
}

2022/03/15追加

encodeURI('/meta/list/data?pageNum=1&pageSize=7&query=%7B"searchValue"%3A""%7D&order=%5B%5D&filter=%5B%5D&namespace=nc.courses.page&pageName=indexCourse')
'/meta/list/data?pageNum=1&pageSize=7&query=%257B%22searchValue%22%253A%22%22%257D&order=%255B%255D&filter=%255B%255D&namespace=nc.courses.page&pageName=indexCourse'
decodeURI('/meta/list/data?pageNum=1&pageSize=999&query=%257B%22searchValue%22%253A%22%22%257D&order=%255B%255D&filter=%255B%255D&namespace=nc.courses.page&pageName=indexCourse')
'/meta/list/data?pageNum=1&pageSize=999&query=%7B"searchValue"%3A""%7D&order=%5B%5D&filter=%5B%5D&namespace=nc.courses.page&pageName=indexCourse'

20220513追加
 

encodeURI('/meta/list/data?pageNum=1&pageSize=7&query={"searchValue":""}&order=[]&filter=[]&namespace=nc.courses.page&pageName=indexCourse')
'/meta/list/data?pageNum=1&pageSize=7&query=%7B%22searchValue%22:%22%22%7D&order=%5B%5D&filter=%5B%5D&namespace=nc.courses.page&pageName=indexCourse'

 

2022/10/14追加

获取数组中60及以上的值

let arr = [46,51, 60, 61, 80, 81];
let arr2 = arr.filter(num => num > 59);
console.log(arr2) //  [60, 61, 80, 81]

 获取对象数组中60及以上的值

let arr = [
    {name:'小明',fen:46},
    {name:'小张',fen:51},
    {name:'小李',fen:60},
    {name:'小赵',fen:61},
    {name:'小钱',fen:80},
    {name:'小孙',fen:81}
];
let arr2 = arr.filter(item => item.fen>59);

 

得到的数组中每一项添加一个单位

 只获取数组中第一个达到60分的那条数据

 

得到小钱的下标 

 

 快速获取键 数组

let arr={
    '一班':[{name:"小白"},{name:"小赵"}],
    '二班':[{name:"小红"},{name:"小李"}],
    '三班':[{name:"小绿"},{name:"小钱"}]
}
console.log(arr)
let data=[]
Object.keys(arr).forEach(key=>{
    if(key=='二班'){
        data = arr[key]
    }
})
console.log('二班有这些人',data)

2022/12/02追加

判断一个值是否在二维数组中,并得到当前所在数组

let code = 66
let arr=[
    [11,22,33,44],
    [55,66,77,88],
    [99,110106,100],
]
let codeRow = []
for(var i=0,len=arr.length;i<len;i++){
    for(var j=0,len=arr[i].length;j<len;j++){
        if(arr[i][j]==code){
            codeaRow = arr[i]
        }
    }
}
console.log(codeaRow)   //[55,66,77,88]

 返回数据中找到value为55,66,77,88的值,得到一个新的数组

let codeRow =  [55, 66, 77, 88]
let arr = [
{name:'小明',value:55,fen:88},
{name:'小明',value:66,fen:89},
{name:'小明',value:88,fen:90},
{name:'小明',value:77,fen:95},
{name:'小明',value:86,fen:95},
{name:'小明',value:44,fen:99},
{name:'小明',value:22,fen:95},
{name:'小明的',value:33,fen:97}
]
let newArr = []
for(var i=0,len=codeRow.length;i<len;i++){
    for(var z=0,len=arr.length;z<len;z++){
        if(arr[z].value == codeRow[i]){
            newArr.push(arr[z])
        }
    }
}
console.log(newArr)

得到数组后进行排序,取第一个值,(最大值) 

 

call,apply 

replace应用


        接口返回的数据处理后再使用
        需求:1、名称为“北京经济技术开发区”时,改为“经开区”

                   2、季度数据统一格式

var data = [{
        "name": "地区生产总值",
        "V": "489.5",
        "area": "东城区",
        "time":"2022年01季度"
      },
      {
        "name": "地区生产总值",
        "V": "489.5",
        "area": "西城区",
        "time":"2022年二季度"
      },{
        "name": "地区生产总值",
        "V": "489.5",
        "area": "丰台区",
        "time":"2022年三季度"
      },
      {
        "name": "地区生产总值",
        "V": "489.5",
        "area": "北京经济技术开发区",
        "time":"2022年04季度"
      }]
let NewData = []
NewData = data.filter(item=>{
    if(item.area == '北京经济技术开发区') {
        item.area = item.area.replace(item.area,'经开区')
    }
    if(item.time.indexOf('一')!=-1)item.time = item.time.replace('一','01')
    if(item.time.indexOf('二')!=-1)item.time = item.time.replace('二','02')
    if(item.time.indexOf('三')!=-1)item.time = item.time.replace('三','03')
    if(item.time.indexOf('四')!=-1)item.time = item.time.replace('四','04')
    return item
})
console.log(NewData)

slice应用

接口返回的所有数据只展示前3名的数据

var data = [{"area": "东城区"},{"area": "西城区"},{"area": "丰台区"},{"area": "经开区"},{"area": "通州区"},{"area": "朝阳区"}]
let three = data.slice(0,3)
console.log(three)

“其他项放在最后” 

        应用场景:饼状图把其他项排在最后

let arr = [
    {name:'小明',fen:46},
    {name:'小张',fen:51},
    {name:'小李',fen:60},
    {name:'其他',fen:65},
    {name:'小钱',fen:80},
    {name:'小孙',fen:81}
];
let lastitem = arr.filter(item => item.name=='其他');
let ind = arr.findIndex(item => item.name == '其他');
arr.splice(ind,1)
arr.push(lastitem[0])
console.log(arr)

  • 28
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
,请问如何构建该二叉树? 回答: 构建扩展遍历序列的二叉树需要用到后序遍历的性质: 在后序遍历中,最后一个元素为根节点。 在扩展遍历序列中,如果一个节点有左/右子树,则其后面必定跟着左/右孩子的值和一个'+'。 可以根据这些性质来构建二叉树: 1. 从扩展遍历序列的末尾找到根节点。 2. 根据性质 1,可以将扩展遍历序列的末尾元素弹出,作为根节点。 3. 在扩展遍历序列中,找到第一个出现 “元素 值 +” 的节点,该节点的子串即为左子树的扩展遍历序列。 4. 根据性质 3,可以将左子树的扩展遍历序列从原序列中分离出来,递归构建出左子树,将左子树挂在根节点的左侧。 5. 剩下的扩展遍历序列即为右子树的扩展遍历序列,递归构建出右子树,将右子树挂在根节点的右侧。 6. 递归结束条件为扩展遍历序列为空。 下面是一个示例代码,构建扩展遍历序列为 "8+4+2+6+5+7+12+10+9+" 的二叉树: ```C #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NODES 100 typedef struct TreeNode { int val; struct TreeNode* left; struct TreeNode* right; } TreeNode; // 根据扩展遍历序列构建二叉树 TreeNode* buildExtendedPostorderTree(char* extended_postorder) { // 如果扩展遍历序列为空,则返回 NULL if (extended_postorder[0] == '\0') { return NULL; } // 创建根节点 TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode)); root->val = atoi(extended_postorder + strlen(extended_postorder) - 2); root->left = NULL; root->right = NULL; // 查找左子树的扩展遍历序列和右子树的扩展遍历序列 int index = 0; while (extended_postorder[index] != ' ') { index++; } char* left_str = (char*)malloc(index + 1); strncpy(left_str, extended_postorder, index); left_str[index] = '\0'; char* right_str = extended_postorder + index + 1; // 如果左子树的扩展遍历序列不为空,则递归构建左子树 if (left_str[0] != '\0') { root->left = buildExtendedPostorderTree(left_str); } // 如果右子树的扩展遍历序列不为空,则递归构建右子树 if (right_str[0] != '\0') { root->right = buildExtendedPostorderTree(right_str); } // 释放内存 free(left_str); return root; } // 后序遍历打印二叉树 void postorderTraversal(TreeNode* root) { if (root == NULL) { return; } postorderTraversal(root->left); postorderTraversal(root->right); printf("%d ", root->val); } int main() { char extended_postorder[MAX_NODES]; scanf("%s", extended_postorder); // 构建扩展遍历序列的二叉树 TreeNode* root = buildExtendedPostorderTree(extended_postorder); // 后序遍历打印二叉树 postorderTraversal(root); printf("\n"); return 0; } ``` 输出结果为: 2 5 7 6 4 9 10 12 8

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值