Path: csiph.com!usenet.pasdenom.info!weretis.net!feeder1.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Thomas 'PointedEars' Lahn Newsgroups: comp.lang.javascript Subject: Re: Push object to array syntax Date: Sat, 26 Jul 2014 11:08:20 +0200 Organization: PointedEars Software (PES) Lines: 83 Message-ID: <1615342.4NPermSF73@PointedEars.de> References: Reply-To: Thomas 'PointedEars' Lahn Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8Bit X-Trace: solani.org 1406365702 18479 eJwFwYEBwDAEBMCVSniMI3n2H6F3fiB4YXCYr28heIHIqWOtWrdHhrXRNHZRcj6qTrU95v0BI84R1g== (26 Jul 2014 09:08:22 GMT) X-Complaints-To: abuse@news.solani.org NNTP-Posting-Date: Sat, 26 Jul 2014 09:08:22 +0000 (UTC) User-Agent: KNode/4.12.4 X-User-ID: eJwFwQkBwDAIA0BLXUl45AAF/xJ2R9FP26BUcLnlQFMyiCPvhUbaGmYYzq5ZleMQqVsyjmdlFtnVlre29QdMdRXd Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAGFBMVEXTxa4RFk5dUWANED8PFEfy7+MGBiW+n3ZNF/QuAAACaElEQVQ4jVXUwVOcMBQG8Dc7Rc4PUntdWV2uxjDpGaGeozOp1woar4jd5t/v9wLstMwsA/ntlxdCAgUc1hjTc9/JCZfGoo3wG3HdmdAWrIJRHe7GM/TmpY5VFefuVcAkkPbLIaN8rmPmjloyZxgyR3GuJ4K0AGtJ2htz8o7yqikm759fldQXaMpbDzjKAG+8v+AugVTOPO5DOjLvGtUYQwh0CPjnVMyGd+8/GfUB5nLKJDD2aLDh5HYyMDJGDwQIo2ZmZcKbowNmAdB/AzyFhrmF2MHRb0QJJfaAnwGB6orZhoykLzJtGwF/xpYxI1dswomiUj3gTuAIqCn/4C7cULwGNBtwMTk3Y4LfKB5YUaOKBKYtpplm7u0vip8tU1NWWyI/7XdcSuIDoMt6rVHMWT0DbjHPGqDqZVSa6zleLcUTcIKLoMv3ueJluALtAo9B302zPPlrtiVScRdCjXvVh3e3JpYa/jjkuC9N+LrBMlz/eAN4eQijX2EdLo6c5tGGHwLyHFtXk89dDGHwCVhG9T0S/j55AhRZgkMCmUQXJ49TnS1wnQDvw0eAh9ICeMmEFbCnPMFzjAvsWoEWEFdYEx+S0MoUZ1gT1wId8+AF3Bl2OoEu906AUHx5VLw/gXYg/x84loOah/2UYNrgiwSwGO7RfUzVBbx/kgpckumGOi6QirtD6gkLTitbnxNol47S2jVc2vsN5kPqaAHT8uUdAJM4v/DanjYOwmUjWznGfwB7sGtAtor5BgofDuzaRj4kSQAqDakTsKORa3Q3xKi3gE1fhl71KRMqrdZ2AWNNg/YOhQyrVBnb+i+nEg4bsDA+egAAAABJRU5ErkJggg== X-Face: %i>XG-yXR'\"2P/C_aO%~;2o~?g0pPKmbOw^=NT`tprDEf++D.m7"}HW6.#=U:?2GGctkL,f89@H46O$ASoW&?s}.k+&. antony@maxwelllucas.com writes: >> newArray.push(result); >> {"marker-name-1":{"lat":"32.0852999","lng":"34.7817676"}}, >> {"marker-name-2":{"lat":"30.0444196","lng":"31.2357116"}} > > Wild guess: something like: > > for( var name in result )if( result.hasOwnProperty( name )) > { newArray[ name ]= result[ name ]; break; } > > ? GIGO. This code will add the first own enumerable property of the object referred to by “result” to the object referred to by “newArray”, or overwrite an existing one, and then exit. But the former object was created by the OP’s code just two line before that, and one line before the only relevant property has been added; so the property name is *known* and the error-prone, though not completely cluless, iteration-assignment is unnecessary. This problem is, in essence, so simple that it does not excuse wild guesses. Please test before you post. Nobody is helped by posting half-knowledge. JavaScript/ECMAScript is not like PHP, for example. There are no built-in associative arrays. Using the bracket property accessor syntax LHS does not add an array element per se (only for particular numeric property names). Using Array instances (as created with the Array initialiser, “[]”) when you do not need Array properties – *numeric* indexes aso. – is wrong. The following could be the solution the OP is looking for: /* we only need an Object instance here */ var o = { /* create _data_ object (ES 5+) */ markers: Object.create(null) }; var feed = Datafeed.query(function (response) { // … _.each(response, function (rows) { // … var markers = o.markers; /* * sanitize title here so that the object is not borked by a marker */ /* * ES 3+; use markers[title] _here_ for more backwards compatibility */ if (title in markers) { /* * or you could make the property value a reference to * an Array instance here, accumulating data for same-named markers */ console.warn('Ignored duplicate marker: "' + title + '"'); } else { markers[title] = {lat: latstr, lng: lngstr}; } }); }); The Object instance having a put() method that does the sanitizing and checks would even be cleaner. jsx.map.Map() could be extended, or a Map Proxy (ES 6) could be used directly. Unfortunately, the OP has not read the FAQ on how to ask questions the smart way, so one cannot be sure as to the solution. Also, them using the borken Google Groups instead of a proper newsreader, it is not likely that many knowledgable people will read their posting. -- PointedEars FAQ: | SVN: Twitter: @PointedEars2 | ES Matrix: Please do not Cc: me. / Bitte keine Kopien per E-Mail.