我有:
Object {12: Object, 13: Object, 14: Object}
我想在这里检测最后一个for循环步骤:
for (var i in objs){
console.log(objs[i]);
}
任何想法?
答案 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;
答案 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
这将为您提供最后一个元素..