我是JSON和JavaScript对象的新手.
以下两个不同的代码片段似乎与我相同:
var myArray = Array();
myArray['A'] = "Athens";
myArray['B'] = "Berlin";
Run Code Online (Sandbox Code Playgroud)
和
var myObject = {'A': 'Athens', 'B':'Berlin'};
Run Code Online (Sandbox Code Playgroud)
因为它们的行为都相同,而且typeof(myArray) == typeof(myObjects)(都产生'对象').
这些变体之间有什么区别吗?
我想将Javascript对象编码为JSON字符串,我遇到了相当大的困难.
对象看起来像这样
new_tweets[k]['tweet_id'] = 98745521;
new_tweets[k]['user_id'] = 54875;
new_tweets[k]['data']['in_reply_to_screen_name'] = "other_user";
new_tweets[k]['data']['text'] = "tweet text";
Run Code Online (Sandbox Code Playgroud)
我想把它变成一个JSON字符串,将它放入一个ajax请求中.
{'k':{'tweet_id':98745521,'user_id':54875, 'data':{...}}}
Run Code Online (Sandbox Code Playgroud)
你得到了照片.不管我做什么,它都行不通.所有JSON编码器都像json2等产生
[]
Run Code Online (Sandbox Code Playgroud)
嗯,这对我没有帮助.基本上我想有像PHP encodejson功能的东西.
有没有办法从某个地方获取javascript对象中的元素数量?(即恒定时间复杂度).
我找不到检索该信息的属性或方法.到目前为止,我只能想到在整个集合中进行迭代,但那是线性时间.
很奇怪,没有直接访问对象的大小,你不觉得.
编辑:
我说的是Object对象(一般不是对象):
var obj = new Object ;
Run Code Online (Sandbox Code Playgroud) 一个"问题",我时不时地有一个对象,例如user = {},通过使用应用程序的过程,这将被填充.让我们说一下,在AJAX调用之后或者我这样做的事情:
user.loc = {
lat: 50,
long: 9
}
Run Code Online (Sandbox Code Playgroud)
在另一个地方,我想检查是否user.loc.lat存在.
if (user.loc.lat) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
如果它不存在,这将导致错误.如果user.loc.lat是undefined,user.loc当然也是undefined如此.
"Cannot read property 'lat' of null" - Dev Tools error
Run Code Online (Sandbox Code Playgroud)
这意味着我需要像这样检查:
if (user.loc) {
if (user.loc.lat) {
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
要么
if (user.loc && user.loc.lat) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
这不是很漂亮,我的对象越大越好 - 显然(想象10级嵌套).它种烧伤我,if(user.loc.lat)不只是返回false,如果user.loc是undefined也.
检查这种情况的理想方法是什么?
我正在维护一些遗留代码,我注意到使用了以下用于定义对象的模式:
var MyObject = {};
(function (root) {
root.myFunction = function (foo) {
//do something
};
})(MyObject);
Run Code Online (Sandbox Code Playgroud)
这有什么用途吗?它只相当于做以下事情吗?
var MyObject = {
myFunction : function (foo) {
//do something
};
};
Run Code Online (Sandbox Code Playgroud)
我不打算采用神圣的方式将整个代码库重构为我的喜好,但我真的很想了解定义对象的迂回方式背后的原因.
谢谢!
当密钥未知时直到运行时,并且当所有键都是相同类型且所有值都是相同类型时,请使用对象上的映射.
当存在对各个元素进行操作的逻辑时使用对象.
在对象上使用地图的适用示例是什么?特别是"什么时候直到运行时才能知道密钥?"
var myMap = new Map();
var keyObj = {},
keyFunc = function () { return 'hey'},
keyString = "a string";
// setting the values
myMap.set(keyString, "value associated with 'a string'");
myMap.set(keyObj, "value associated with keyObj");
myMap.set(keyFunc, "value associated with keyFunc");
console.log(myMap.get(keyFunc));
Run Code Online (Sandbox Code Playgroud) 所以我们有一个案例,我们会有一些JSON,其中key是id(int),值是字符串.但是我们注意到大多数时候,我们根据字符串查找id,所以我们决定将其反转并将字符串作为键,值为id.因为这样而不是遍历每个项目并比较值,我们可以这样做var id = storage[text];.以下是我们所做的例子.
这是旧实现的示例:
var storage = {
0 : null,
1 : "Hello",
2 : "world!",
3 : "How are you?"
}
Run Code Online (Sandbox Code Playgroud)
以下是新实现的示例:
var storage = {
"null" : 0,
"Hello" : 1,
"world!" : 2,
"How are you?" : 3
}
Run Code Online (Sandbox Code Playgroud)
我知道现在字符串是键,并且可以为相同的字符串获取相同的id.但是从现在开始字符串可能非常巨大(机会很小,但每个字符串可能最大1KB),JS或Android webview是否存在长度限制对象键?
而且,这种实施有缺点吗?到目前为止我没有发现任何问题,但你永远都不知道.
我想总结一个对象的值.
我习惯了python,它只会是:
sample = { 'a': 1 , 'b': 2 , 'c':3 };
summed = sum(sample.itervalues())
Run Code Online (Sandbox Code Playgroud)
以下代码有效,但它是很多代码:
function obj_values(object) {
var results = [];
for (var property in object)
results.push(object[property]);
return results;
}
function list_sum( list ){
return list.reduce(function(previousValue, currentValue, index, array){
return previousValue + currentValue;
});
}
function object_values_sum( obj ){
return list_sum(obj_values(obj));
}
var sample = { a: 1 , b: 2 , c:3 };
var summed = list_sum(obj_values(a));
var summed = object_values_sum(a)
Run Code Online (Sandbox Code Playgroud)
我错过了什么明显的,或者这只是它的方式?
我想从数组中的每个对象中删除"bad"属性.有没有比使用for循环并从每个对象中删除它更好的方法呢?
var array = [{"bad": "something", "good":"something"},{"bad":"something", "good":"something"},...];
for (var i = 0, len = array.length; i < len; i++) {
delete array[i].bad;
}
Run Code Online (Sandbox Code Playgroud)
看起来似乎应该有一种方法来使用原型或其他东西.我不知道.想法?
javascript ×10
object ×4
json ×2
android ×1
arrays ×1
collections ×1
ecmascript-6 ×1
elements ×1