Js遍历Josn对象(内容对比页实现思路)

简介:

      经常在商城或汽车系统里可以看到很多商品对比或车型对比的页面,最近做项目也遇到了这样的需求,想到了一种实现思路,如果大家有什么更好的办法,不惜赐教。

1.实现基础:扩展prototype,实现通过索引来访问Josn对象属性字段。

<script type="text/javascript">
        Object.prototype.k = function (n, t) {
            var arr = [];
            for (pro in this) arr.push(pro);
            return t ? arr[n] : this[arr[n]]
        }
        var jsonObject = { "UserID": 11, "Name": { "FirstName": "John", "LastName": "Hansen" }, "Email": "xxx@hotmail.com" };
        var b = { b: { bb: { bbb: { bbbb: '22'}}} }

        alert(jsonObject.k(0, 1))  //取属性带2个参数
        alert(jsonObject.k(0))   //取直就只带一个参数
        alert(b.k(0).k(0).k(0).k(0, 1))
        alert(b.k(0).k(0).k(0).k(0))
    </script>

2.思路分析:这里的内容对比,假定对比的字段都是固定的,也就是说参与对比的几个对象所拥有的字段都是一样的。

①建好对比内容框架,固定表格对比字段,比如像这样:

<table width="100%" class='border' border="0" cellpadding="2" cellspacing="1">
        <tr>
            <td id='field_r0_c0'>
                对比字段1
            </td>
            <td>
                <span id='field_r0_c1'></span>
            </td>
            <td>
                <span id='field_r0_c2'></span>
            </td>
            <td>
                <span id='field_r0_c3'></span>
            </td>
            <td>
                <span id='field_r0_c4'></span>
            </td>
        </tr>
        <tr>
            <td id='field_r1_c0'>
                对比字段2
            </td>
            <td>
                <span id='field_r1_c1'></span>
            </td>
            <td>
                <span id='field_r1_c2'></span>
            </td>
            <td>
                <span id='field_r1_c3'></span>
            </td>
            <td>
                <span id='field_r1_c4'></span>
            </td>
        </tr>
        <tr>
            <td id='field_r2_c0'>
                对比字段3
            </td>
            <td>
                <span id='field_r2_c1'></span>
            </td>
            <td>
                <span id='field_r2_c2'></span>
            </td>
            <td>
                <span id='field_r2_c3'></span>
            </td>
            <td>
                <span id='field_r2_c4'></span>
            </td>
        </tr>
        <tr>
            <td id='field_r3_c0'>
                对比字段4
            </td>
            <td>
                <span id='field_r3_c1'></span>
            </td>
            <td>
                <span id='field_r3_c2'></span>
            </td>
            <td>
                <span id='field_r3_c3'></span>
            </td>
            <td>
                <span id='field_r3_c4'></span>
            </td>
        </tr>
        <tr>
            <td id='field_r4_c0'>
                对比字段5
            </td>
            <td>
                <span id='field_r4_c1'></span>
            </td>
            <td>
                <span id='field_r4_c2'></span>
            </td>
            <td>
                <span id='field_r4_c3'></span>
            </td>
            <td>
                <span id='field_r4_c4'></span>
            </td>
        </tr>
    </table>

     这里通过col和row分别对应Josn对象里的第几个对象的第几个字段。

②通过ajax方式,取得将要对比的内容的Josn数据格式。

③通过对Josn对象的分析,利用Js循环为每个单元格赋值,伪代码:

       for (var r = 0; r <fieldCount ; r++) {      //fieldCount 对比Josn对象的字段数
                for (var c = 1; c < cmpList.Length; c++) {   //cmpList对比Josn集合
                    elem = "#field_r" + r + "_c" + c;
                    $(elem).html(cmpList[c][r]); //第几个对象的地几个字段值
                }
            }

2011年9月19日17:26:58 附加:

更好的遍历Josn的方法,利用jquery的each方法:

  var arr1 = [ "one", "two", "three", "four", "five" ];
  $.each(arr1, function(){
  alert(this);
  });
  输出:one two three four five

  var arr2 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  $.each(arr2, function(i, item){
  alert(item[0]);
  });
  输出:1 4 7

  var obj = { one:1, two:2, three:3, four:4, five:5 };
  $.each(obj, function(key, val) {
  alert(obj[key]);
  });
  输出:1 2 3 4 5
  写了几个例子,运行一下看看就明白啦!很简单吧!







目录
相关文章
|
11月前
|
JavaScript 前端开发
如何在 JavaScript 中使用 __proto__ 实现对象的继承?
使用`__proto__`实现对象继承时需要注意原型链的完整性和属性方法的正确继承,避免出现意外的行为和错误。同时,在现代JavaScript中,也可以使用`class`和`extends`关键字来实现更简洁和直观的继承语法,但理解基于`__proto__`的继承方式对于深入理解JavaScript的面向对象编程和原型链机制仍然具有重要意义。
|
6月前
|
编解码 JavaScript 前端开发
【Java进阶】详解JavaScript的BOM(浏览器对象模型)
总的来说,BOM提供了一种方式来与浏览器进行交互。通过BOM,你可以操作窗口、获取URL、操作历史、访问HTML文档、获取浏览器信息和屏幕信息等。虽然BOM并没有正式的标准,但大多数现代浏览器都实现了相似的功能,因此,你可以放心地在你的JavaScript代码中使用BOM。
185 23
|
11月前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
11月前
|
JSON 前端开发 JavaScript
JavaScript中对象的数据拷贝
本文介绍了JavaScript中对象数据拷贝的问题及解决方案。作者首先解释了对象赋值时地址共享导致的值同步变化现象,随后提供了五种解决方法:手动复制、`Object.assign`、扩展运算符、`JSON.stringify`与`JSON.parse`组合以及自定义深拷贝函数。每种方法都有其适用场景和局限性,文章最后鼓励读者关注作者以获取更多前端知识分享。
157 1
JavaScript中对象的数据拷贝
|
11月前
|
JavaScript 前端开发 图形学
JavaScript 中 Math 对象常用方法
【10月更文挑战第29天】JavaScript中的Math对象提供了丰富多样的数学方法,涵盖了基本数学运算、幂运算、开方、随机数生成、极值获取以及三角函数等多个方面,为各种数学相关的计算和处理提供了强大的支持,是JavaScript编程中不可或缺的一部分。
|
存储 JavaScript 前端开发
JavaScript 对象的概念
JavaScript 对象的概念
122 4
|
存储 JavaScript 前端开发
js中函数、方法、对象的区别
js中函数、方法、对象的区别
222 2
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
161 1
|
12月前
|
JavaScript 前端开发 大数据
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
190 0
|
JavaScript
js之遍历方法
js之遍历方法
86 0

热门文章

最新文章