您的位置:首页 > 职场人生

[置顶] 空对象动态添加属性(面试常考)返回JSON,曾经惨败的一道面试题

2016-05-17 17:53 615 查看


<!doctype html>
<html lang="en">

<head>
<meta charset="UTF-8" />
<title>Document</title>
<script type="text/javascript">
var b = ['a', 'b', 'c'];
var a = {};
a[b[0]] = 'aaaaaaa';
a[b[1]] = 'bbbbbbb';
a[b[2]] = 'ccccccc';
for (var i in a) {
console.log(i + ':' + a[i]);
}
console.log(a);
if (!('w' in a)) {
a['w'] = 123;
}
for (var i in a) {
console.log(i + ':' + a[i]);
}
console.log(a);
console.log(JSON.stringify(a));
</script>
</head>

<body>

</body>

</html>




<!doctype html>
<html lang="en">

<head>
<meta charset="UTF-8" />
<title>Document</title>
<script type="text/javascript">
var a = ['a', 'abc', 'abcd', 'a', 'a', 'a', 'a', 'abc'];
var obj = {};
var Obj2 = {};
console.log('-------------------第一种方法-------------------');
for (var i = 0; i < a.length; i++) {
if (!Obj2[a[i]]) {
Obj2[a[i]] = 1;
} else {
Obj2[a[i]]++;
}
}
console.log(Obj2);
console.log(JSON.stringify(Obj2));
console.log(Obj2.a)
console.log('-------------------第二种方法-------------------');
for (var i = 0; i < a.length; i++) {
if (!(a[i] in obj)) {
obj[a[i]] = 1;
} else {
obj[a[i]]++;
}
}
console.log(obj);
console.log(JSON.stringify(obj));
console.log(obj.a)
</script>
</head>

<body>

</body>

</html>


拓展阅读 $.extend,JSON.stringify() ,JSON.parse()



<!doctype html>
<html lang="en">

<head>
<meta charset="UTF-8" />
<script type="text/javascript" src="jquery-2.2.4.min.js"></script>

<title>Document</title>
<script type="text/javascript">
var a = {
"name": "libin",
"age": "30"
};
var b = {
"name": "libin",
"sex": "男"
};
var c = $.extend({},a, b);  //如果写成$.extend(a, b)会改变a对象的结构
console.log(c);
var d = JSON.stringify(c);
console.log(d + ",对象类型是:" + typeof d + ",d.name的值:" + d.name);
var e = JSON.parse(d);
console.log(e);
console.log(e + ",对象类型是:" + typeof e + ",e.name的值:" + e.name);
</script>
</head>

<body>

</body>

</html>


比较两个JSON是否相等

<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<title>比较两个JSON是否相等</title>
<script type="text/javascript">
var jsonObjA = {
"Name": "MyName",
"Company": "MyCompany",
"Infos": [{
"Age": "100"
}, {
"Box": [{
"Height": "100"
}, {
"Weight": "200"
}]
}],
"Address": "马栏山"
}
var jsonObjB = {
"Address": "马栏山",
"Name": "MyName",
"Company": "MyCompany",
"Infos": [{
"Age": "100"
}, {
"Box": [{
"Height": "100"
}, {
"Weight": "200"
}]
}],

}
console.log("方法有局限:将JSON的对象序列换一下:'Address': '马栏山'");
console.log(JSON.stringify(jsonObjA) == JSON.stringify(jsonObjB));
</script>
<script type="text/javascript">
function isObj(object) {
return object && typeof(object) == 'object' && Object.prototype.toString.call(object).toLowerCase() == "[object object]";
}

function isArray(object) {
return object && typeof(object) == 'object' && object.constructor == Array;
}

function getLength(object) {
var count = 0;
for(var i in object) count++;
return count;
}

function Compare(objA, objB) {
if(!isObj(objA) || !isObj(objB)) return false; //判断类型是否正确
if(getLength(objA) != getLength(objB)) return false; //判断长度是否一致
return CompareObj(objA, objB, true); //默认为true
}

function CompareObj(objA, objB, flag) {
for(var key in objA) {
if(!flag) //跳出整个循环
break;
if(!objB.hasOwnProperty(key)) {
flag = false;
break;
}
if(!isArray(objA[key])) { //子级不是数组时,比较属性值
if(objB[key] != objA[key]) {
flag = false;
break;
}
} else {
if(!isArray(objB[key])) {
flag = false;
break;
}
var oA = objA[key],
oB = objB[key];
if(oA.length != oB.length) {
flag = false;
break;
}
for(var k in oA) {
if(!flag) //这里跳出循环是为了不让递归继续
break;
flag = CompareObj(oA[k], oB[k], flag);
}
}
}
return flag;
}
var result = Compare(jsonObjA, jsonObjB);
console.log(result); // true or false
</script>
</head>

<body>
</body>

</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: