blog icon indicating copy to clipboard operation
blog copied to clipboard

字符串与JSON

Open yongheng2016 opened this issue 8 years ago • 0 comments

1.使用数组拼接出如下字符串

var prod = {
    name: '女装',
    styles: ['短款', '冬季', '春装']
};
function getTpl(data){
//todo...
};
var result = getTplStr(prod);  //result为下面的字符串
<dl class="product">
    <dt>女装</dt>
    <dd>短款</dd>
    <dd>冬季</dd>
    <dd>春装</dd>
</dl>

代码:

function getTpl(obj){
	var arr=[];
	var str='';
	var str1='';
	var str2='';
	for (var key in obj){
		arr.push(obj[key])
	}
	str1='<dt>'+arr[0]+'</dt>'
	for (var i=1; i<arr.length; i++){
		for (var j=0; j<arr[i].length; j++){
			str2+='<dd>'+arr[i][j]+'</dd>'
		}
	}

	str='<dl class="product">'+str1+str2+'</dl>';
	return str;
}
console.log(getTpl(prod))

2、写出两种以上声明多行字符串的方法

例如:

var str = 'abcdeabcdeabcdeancdeabcdeabcdeabcdeancdeabcdeabcdeabcdeancdeabcdeabcdeabcdeancde'

这段字符串很长,如何多行优雅的显示

方法1:(注意,反斜杠的后面必须是换行符,而不能有其他字符(比如空格),否则会报错。)

var str = 
'abcdeabcdeabcdeancde\
abcdeabcdeabcdeancde\
abcdeabcdeabcdeancdea\
bcdeabcdeabcdeancde';
console.log(str)

方法2:

var str = 
'abcdeabcdeabcdeancde'
+'abcdeabcdeabcdeancde'
+'abcdeabcdeabcdeancdea'
+'bcdeabcdeabcdeancde';
console.log(str)

方法3:

var str=(function () { /*
abcdeabcdeabcdeancde
abcdeabcdeabcdeancde
abcdeabcdeabcdeancdea
bcdeabcdeabcdeancde
*/}).toString().split('\n').slice(1,-1).join('')  //注意这里的join('');
console.log(str)

3、补全如下代码,让输出结果为字符串: hello\饥人谷

var str = //补全代码
console.log(str)

代码:

var str='hello\\\\饥人谷';
console.log(str)

4、以下代码输出什么?为什么

var str = 'jirengu\nruoyu'
console.log(str.length)     //输出:13   字符串中的\n是转义字符,表示换行,代表一个字符长度;

5、写一个函数,判断一个字符串是回文字符串,如 abcdcba是回文字符串, abcdcbb不是

function huiwen(str){
	if(str===str.split('').reverse().join('')){
		console.log('是回文字符串')
	}else{
		console.log('不是回文字符串')
	}	
}

var str1='abcdcba'
var str2='jfsljfsd'
huiwen(str1)
huiwen(str2)

6、写一个函数,统计字符串里出现出现频率最多的字符

function maxWord(str){
	var obj={};
	var maxNum=0;
	var maxNames='';
	var maxName='';
	for (var i=0; i<str.length; i++){
		if (obj[str[i]]){
			++obj[str[i]]
		}else{
			obj[str[i]]=1
		}
	}
	for (var key in obj){
		if (obj[key]>maxNum){
			maxNum = obj[key]
			maxName = key
		}
	}
	for (var i in obj){
		if (obj[i]===obj[maxName]){
			maxNames+='"'+i+'"'
		}
	}
	return '频率最多的字符:'+maxNames+'\n'+'出现次数:'+maxNum;
}


var str1='fffaaaccc'
console.log(maxWord(str1))

7、写一个camelize函数,把my-short-string形式的字符串转化成myShortString形式的字符串,如

camelize("background-color") == 'backgroundColor'
camelize("list-style-image") == 'listStyleImage'

代码:

function camelize(str){
	var arr;
	var upp;
	arr=str.split('');
	for (var i=0; i<arr.length; i++){
		if (arr[i]==='-'){
			upp=arr[i+1].toUpperCase();
			arr.splice(i,2,upp);
		}
	}
	str=arr.join('');
	console.log(str)
	return str;
}

8、写一个 ucFirst函数,返回第一个字母为大写的字符 (***)

ucFirst("hunger") == "Hunger"

代码:

function ucFirst(str){
	var arrStr=str.split('');
	arrStr[0]=arrStr[0].toUpperCase();
	str = arrStr.join('');
	console.log(str)
	return str;
}

var str='hunger'	
ucFirst(str)

9、写一个函数truncate(str, maxlength), 如果str的长度大于maxlength,会把str截断到maxlength长,并加上...,如

truncate("hello, this is hunger valley,", 10) == "hello, thi...";
truncate("hello world", 20) == "hello world"

代码:

function truncate(str, maxlength){
	if (str.length<=maxlength){
		return str;
	}else{
		str=str.slice(0,maxlength)+'...';
		return str;
	}
}

var str='fjsldjfowejf'
console.log(truncate(str, 5));
console.log(truncate(str, 30));

10、什么是 JSON格式数据?JSON格式数据如何表示对象?window.JSON 是什么?

JSON 语法是 JavaScript 对象表示语法的子集。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

JSON 数据的书写格式是:名称/值对,名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:

JSON中的值可以是:字符数字布尔truefalsenull对象数组

例:

var json1 = {"name": "Byron", "age": "24"}

var json2 = [
    {"name": "Byron", "age": "24"}, 
    {"name": "Byron2", "age": "25"}
]

window.JSON:

用于判断浏览器是否兼容JSON的用法,例如IE8版本以上才内置支持JSON.parse方法,对此常见这样的写法:

if(window.JOSN){
   jsonObj2 = JSON.parse(json);
}else{
}

可以通过对原生对象的模仿使那些没有原生支持 JSON 对象的浏览器(比如IE6)中使用 JSON 对象。

模仿源码: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON

11、如何把JSON 格式的字符串转换为 JS 对象?如何把 JS对象转换为 JSON 格式的字符串?

原生支持

IE以上浏览器都支持了一个对象JSON,JSON对象主要有两个『静态』函数

  1. parse:把字符串转化为JSON对象
  2. stringify:把JSON对象转化为字符串(出人意料的不叫toString,因为不是实例方法)
var json = {
  "name": "Byron",
  "age": 24
};

var json_str = JSON.stringify(json);
console.log(json_str);
console.log(JSON.parse(json_str));

eval

邪恶的eval出现了,以前很多人图省事用eval把字符串转为json(少用)

var json_str = '{"name": "Byron", "age": 24}';
var json = eval('(' + json_str + ')');
console.log(json);

yongheng2016 avatar Jun 09 '17 04:06 yongheng2016