如何检测最后一个循环步骤 - js对象

时间:2015-08-03 15:19:05

标签: javascript jquery

我有:

Object {12: Object, 13: Object, 14: Object}

我想在这里检测最后一个for循环步骤:

for (var i in objs){
   console.log(objs[i]);
}

任何想法?

4 个答案:

答案 0 :(得分:2)

您可以使用标准对象方法Object.keys();



from Tkinter import Tk, N, S, W, E, BOTH, Text, Frame,Label,  Button,Checkbutton, IntVar,Entry
import socket
import sys
import os
import time
import datetime
from threading import Thread

data = ''

def timeStamped(fmt='%Y-%m-%d-%H-%M-%S_{fname}'):
    return datetime.datetime.now().ctime()
def get_constants(prefix):
    """Create a dictionary mapping socket module constants to their names."""
    return dict( (getattr(socket, n), n)
                 for n in dir(socket)
                 if n.startswith(prefix)
                 )


class Example(Frame):


    def __init__(self, parent):
        Frame.__init__(self, parent)   
        self.friend_check = IntVar()
        self.parent = parent    
        self.initUI()


    def initUI(self):      

        self.parent.title("Home.local")
        self.PoolLabel = Label (text = "Pool Temperature:")
        self.PoolLabel.grid(row=0,column=0,columnspan=2, sticky=W)
        self.BasementLabel = Label (text = "Basement Conditions:")
        self.BasementLabel.grid(row=3,column=0,columnspan=2, pady =10) 


        try:
            datalist=data.split(':')
            print datalist
            self.cl_label=Label(text="")
            self.cl_label.config(text=datalist[0].split(', ',1)[1])
            self.cl_label.grid(row=1,column=0,columnspan=2,sticky='EW')

            self.baselabelT=Label(text="")
            self.baselabelT.config(text=datalist[1])
            self.baselabelT.grid(row=4,column=0,columnspan=2,sticky='EW') 

            self.baselabelH=Label(text="")
            self.baselabelH.config(text=datalist[2])
            self.baselabelH.grid(row=5,column=0,columnspan=2,sticky='EW')              
        except IndexError:
            datalist = 'null'        


        self.btn_Exit = Button(text="Exit", command = '')
        self.btn_Exit.grid(row=10,column=2)
        #self.update()
        self.after(1000, self.initUI)


class DataCom(Thread):

    def __init__(self, val):
        Thread.__init__(self)
        self.val = val

    def run(self):
        global data
        families = get_constants('AF_')
        types = get_constants('SOCK_')
        protocols = get_constants('IPPROTO_')

        # Create a TCP/IP socket
        sock = socket.create_connection(('localhost', 10000))
        print >>sys.stderr, 'Family  :', families[sock.family]
        print >>sys.stderr, 'Type    :', types[sock.type]
        print >>sys.stderr, 'Protocol:', protocols[sock.proto]
        print >>sys.stderr    
        while True:
            try:
            # Send flag
                message = 'INFO'

                print >>sys.stderr, 'sending "%s" Length: %s' % (message,len(message))

                sock.sendall(message)

                amount_received = 0
                amount_expected = len(message)

                while amount_received < amount_expected:
                    data = sock.recv(1024)
                    amount_received += len(data)
                    if len(data) != 0:
                        print >>sys.stderr, 'Server received %s %s:Length %s' % (timeStamped(), data, len(data))
                    else:
                        sock.close()
                        print >>sys.stderr, 'No more data, closing socket'
                        break
                if not data:
                        break
            finally:
                time.sleep(1)     
def main():
    myThread = DataCom(1)
    myThread.setName('DataComThread') 
    myThread.start()

    root = Tk()

    root.geometry("600x450+900+300")
    root.resizable(0,0)
    app = Example(root)
    root.config(background = "#FFFFFF") # ui debug
    root.mainloop()  



if __name__ == '__main__':
    main()  
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我希望这就是你想要的

var latest;
for (var i in objs){
    console.log(objs[i]);
    latest = objs[i];
}
//work with latest

答案 2 :(得分:0)

由于你无法控制对象的属性顺序(它们以任意顺序排列,你无法定义)整个想法可能会丢失一些,或者大多数,如果不是所有其相关性

如果您实际上并不关心在最后一个循环步骤中正在处理哪个属性,请参阅以下示例:

var objs = {12: Object, 13: Object, 14: Object};
var c = 0;
var objsKeys = Object.keys(objs); [12, 13, 14]
for (var i=0; i<obsjKeys.length, i++){
    if (i===(obsjKeys.length -1)) {
        console.log("Last Run of the Loop:");
    }
    console.log(objs[obsjKeys[i]]);
}

Object.keys()仅在ES5之后可用,这意味着IE&lt; 9不会支持它。在这种情况下,您可以使用for..in

自行实现它
Object.keys = Object.keys || function(obj) {
    var tempArray = [];
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            tempArray.push(key);
        }
    }
    return tempArray;
};

答案 3 :(得分:-2)

Object.length - 1

这将为您提供最后一个元素..