【问题标题】:Iterating through a javascript object and outputting certain information based upon criteria遍历 javascript 对象并根据条件输出某些信息
【发布时间】:2013-07-02 07:07:27
【问题描述】:

我有一个对象数组,我想从中获取值:

    lastChanceSeats: Object
      assignedSeats: Array[6]
        0: Object
          SeatId: "29A"
          passengerName: "Mr test1 test1"
          sectorSequence: 1
        1: Object
          SeatId: "22A"
          passengerName: "Mr test1 test1"
          sectorSequence: 2
        2: Object
          SeatId: "29B"
          passengerName: "Mrs test2 test2"
          sectorSequence: 1
        3: Object
          SeatId: "22B"
          passengerName: "Mrs test2 test2"
          sectorSequence: 2
        4: Object
          SeatId: "29C"
          passengerName: "Master test3 test3"
          sectorSequence: 1
        5: Object
          SeatId: "22C"
          passengerName: "Master test3 test3"
          sectorSequence: 2

我想按以下格式显示数据:

  • 第一个{passengerName}
  • {sectorSequence: 1} + {SeatId}
  • {sectorSequence: 2} + {SeatId}

...那么乘客二、三等也一样。

【问题讨论】:

  • 您应该使用html 来实现这一目标。
  • 嗨,对不起,我正在研究 id 如何遍历数组以按照呈现的方式提取数据。

标签: javascript jquery arrays object iteration


【解决方案1】:

使用简单的模板并循环遍历每个项目以生成输出:

var data=[
    {
        "SeatId": "29A",
        "passengerName": "Mr test1 test1",
        "sectorSequence": 1
    },
    {
        "SeatId": "22A",
        "passengerName": "Mr test1 test1",
        "sectorSequence": 2
    },
    {
        "SeatId": "29B",
        "passengerName": "Mrs test2 test2",
        "sectorSequence": 1
    }
]


function template(ob, str){
   return str.replace(/{([\w\s.\$]+?)}/g, 
     function(j,a){  return ob[a]||"";  } );
}

strTemplate="First {passengerName}  {sectorSequence} + {SeatId}";

out=$(data).map(function(i,item){ return template(item, strTemplate)}).toArray().join("\n");

alert(out);

/* result:
First Mr test1 test1  1 + 29A
First Mr test1 test1  2 + 22A
First Mrs test2 test2  1 + 29B  */

【讨论】:

    【解决方案2】:

    不可能对对象属性进行有序迭代。

    你可以这样做:

    var data=[
        {
            "SeatId": "29A",
            "passengerName": "Mr test1 test1",
            "sectorSequence": 1
        },
        {
            "SeatId": "22A",
            "passengerName": "Mr test1 test1",
            "sectorSequence": 2
        },
        {
            "SeatId": "29B",
            "passengerName": "Mrs test2 test2",
            "sectorSequence": 1
        }
    ], 
    orderedObjectProps = ['SeatId', 'passengerName', 'sectorSequence'],
    dataLength = data.length,
    propsLength = orderedObjectProps.length,
    i = 0;
    
    for(i; i < dataLength; i++) {
      var obj = data[i],
      j = 0;
      for(j; j < propsLength; j++) {
        var propName = orderedObjectProps[j],
        propValue = obj[propName];
        console.log(propValue);
      }
    }
    

    上面的代码会按照你想要的顺序打印值。

    【讨论】:

    • 感谢以上内容,但是我试图获取第一个乘客姓名并在下面列出他们给定的座位号,然后是第二个乘客姓名和他们的座位号等,而不是重新排序属性。我需要查看每个对象,评估其中任何一个的名称是否相同,并在下面列出适用的座位......这有意义吗?!?
    【解决方案3】:

    使用与上述答案相同的数据,您可以尝试这个 sn-p

    var data=[
        {
            "SeatId": "29A",
            "passengerName": "Mr test1 test1",
            "sectorSequence": 1
        },
        {
            "SeatId": "22A",
            "passengerName": "Mr test1 test1",
            "sectorSequence": 2
        },
        {
            "SeatId": "29B",
            "passengerName": "Mrs test2 test2",
            "sectorSequence": 1
        }
    ]
    
    function test_iteration(data) {
      data.forEach(e => {
        console.log(`SeatId : ${e.SeatId}`);
        console.log(`passengerName : ${e.passengerName}`);
        console.log(`sectorSequence : ${e.sectorSequence}`);
      })
    }
    function test_iteration_2(data) {
      data.forEach(e => {
        for (var prop in e) {
          if (Object.prototype.hasOwnProperty.call(e, prop)) {
            console.log(`${prop} : ${e[prop]}`);
          }
        }
      })
    }
    
    test_iteration_2(data) ;

    【讨论】:

      猜你喜欢
      • 2021-01-20
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 2023-03-22
      • 2021-12-22
      • 2014-07-31
      相关资源
      最近更新 更多