标签: javascript-objects

获取JavaScript对象的所有键

我想知道是否有一种快速方法可以将关联数组的键提取到数组中,或者使用JavaScript提取逗号分隔列表(jQuery没问题).

options = {key1: "value1", key2: "value2"};
Run Code Online (Sandbox Code Playgroud)

结果应该是数组:

["key1", "key2"]
Run Code Online (Sandbox Code Playgroud)

或只是一个字符串:

"key1, key2"
Run Code Online (Sandbox Code Playgroud)

javascript arrays jquery javascript-objects

18
推荐指数
3
解决办法
5万
查看次数

在同一对象中访问JavaScript Object Literal值

可能重复:
对象文字声明中的自引用

有没有办法在同一个对象文字中访问属性名称的值?像这样的东西:

myFunction.init({
    varOne: 'something',
    varTwo: this.varOne + 'something else'
})
Run Code Online (Sandbox Code Playgroud)

javascript javascript-objects

17
推荐指数
1
解决办法
6953
查看次数

如何使用JavaScript/Prototype 1.7递归搜索对象树并根据键/值返回匹配对象

我有一些嵌套的对象数据,我想搜索它并根据id返回匹配的对象.

var data = [{id: 0, name: 'Template 0', subComponents:[
        {id: 1, name: 'Template 1', subItems:[
            {id: 2, name: 'Template 2', subComponents:[{id: 3, name: 'Template 3'}], subItems: [{id: 4, name: 'Template 4'}]}
        ]}
    ]}
];
Run Code Online (Sandbox Code Playgroud)

所以我想做这样的事情

getObjectByKeyValue({id: 3}) 
Run Code Online (Sandbox Code Playgroud)

并让它回来

{id: 3, name: 'Template 3'}
Run Code Online (Sandbox Code Playgroud)

它有点必须完成,因为我有subItems,AND子组件,每个子组件都可以有孩子.

我尝试使用Prototype 1.7并没有运气 - 我认为这只是搜索一个数组,而不是一个带有它的子节点的树:

data.find(function(s){return s.id == 4;})
Run Code Online (Sandbox Code Playgroud)

提前致谢!!!!!!

javascript tree recursion prototype javascript-objects

16
推荐指数
2
解决办法
2万
查看次数

有没有办法防止在单例实例中覆盖/覆盖函数/变量?

考虑这个伪代码:

(function(window){
   var options = { /*where everything goes */ };

   var instance = (function(options){
       for (var i in options){
       if (options.hasOwnProperty(i)){
         this[i] = options[i];
       }
     }
   })(options);

   instance.callbacks = function(cb){
     //...
   }

   instance.is_allowed = function()
    //... checks, return boolean
   }

   window.instance = instance;
})(this);
Run Code Online (Sandbox Code Playgroud)

如果有人想操纵这个代码(例如恶意用户),他会is_allowed用自己的代码重写函数,例如,使用地址栏(他没有萤火虫,谁知道).

javascript:(function(){ window.instance.is_allowed = function(){ return true; } })();
Run Code Online (Sandbox Code Playgroud)

这是一个简单的例子,但重点是,Javascript中的任何内容都可以被覆盖.

我知道在es5中我们有Object.defineProperty,所​​以你可以设置:

// being explicit
Object.defineProperty(instance, "is_allowed", {
  enumerable: false,
  configurable: false,
  writable: false,
  value: function(){
    // do checks
  }    
});
Run Code Online (Sandbox Code Playgroud)

实际上,在这个意义上最好的是使用Object.freeze(instance)或 …

javascript singleton overwrite javascript-objects

16
推荐指数
1
解决办法
1万
查看次数

访问Javascript对象原型

据我所知,在JavaScript中,每个对象都有一个prototype,它暴露了一些默认属性.我有以下代码,我试图通过设置两个对象的Year属性prototype.但这两个电话都失败了.

toLocalString()如果我没有访问权限,如何覆盖任何对象prototype?请注意,以下代码用于测试prototype属性,但我的目的是覆盖该toLocalString()方法.

var car = {
    Make: 'Nissan',
    Model: 'Altima'
};

car.Year = 2014;
alert(car.Year);

alert(car.prototype); // returns undefined

car.prototype.Year = 2014; // Javascript error

// --------------

function Car() {
    this.Make = 'NISSAN';
    this.Model = 'Atlanta';
}

var v = new Car();
v.prototype.Year = 2014; // JavaScript error
alert(v.prototype);
Run Code Online (Sandbox Code Playgroud)

javascript prototype javascript-objects

16
推荐指数
2
解决办法
353
查看次数

输入{a:1}给出1和{a:1,b:2}在Javascript控制台中输入错误的行为是什么?

以下内容将在Firebug或jsconsole.com或其他Javascript交互式控制台中显示:

>>> foo = { a : 1, b : 2.2 }
Object { a=1, more...}

>>> foo.a
1

>>> foo.b
2.2

>>> { a : 1, b : 2.2 }
SyntaxError: invalid label { message="invalid label", more...}

>>> { a : 1 }
1
Run Code Online (Sandbox Code Playgroud)

为什么是1返回{a : 1}以及为何{a : 1, b : 2.2}给了一个错误?在Ruby中,它们会以您定义它的方式返回.

javascript firebug javascript-objects

15
推荐指数
1
解决办法
248
查看次数

访问者属性出错:无法重新定义不可配置的属性"status"

我正在尝试定义一个对象并为其创建一个访问器属性.

HTML:

<input type='hidden' id='crudMode' value='Create' />
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

crudMode = {
   create: "Create",
   read: "Read",
   update: "Update",
   delete: "Delete",
   current: function () { return $('#crudMode').val(); }
}

Object.defineProperty(crudMode, 'mode', {
    get: function(){
        return this.current();
    },
    set: function(value){ 
        $('#crudMode').val(value);
    }
});
Run Code Online (Sandbox Code Playgroud)

但是当我使用它时,它会在问题标题中引发提到的错误:

console.log(crudMode.mode);
Run Code Online (Sandbox Code Playgroud)

抛出:

TypeError:无法重新定义不可配置的属性"mode"

这有什么不对?

javascript properties javascript-objects defineproperty

14
推荐指数
1
解决办法
1万
查看次数

这个生成的代码应该是什么(打算)做什么的?

我在自动生成的javascript文件中看到了这个:

function map(x){
    x={x:x};
    delete x.x;
    return x
}
Run Code Online (Sandbox Code Playgroud)

我的结论是用于创建一个对象,但为什么要以这种方式创建它?这是一种模式吗?

UPDATE

更多信息,创建此代码的工具是来自Google的dart2js,代码用于此上下文:

(function (reflectionData) {
  function map(x){x={x:x};delete x.x;return x}
  if (!init.libraries) init.libraries = [];
  if (!init.mangledNames) init.mangledNames = map();
  if (!init.mangledGlobalNames) init.mangledGlobalNames = map();
  if (!init.statics) init.statics = map();
  if (!init.interfaces) init.interfaces = map();
Run Code Online (Sandbox Code Playgroud)

javascript javascript-objects

14
推荐指数
3
解决办法
657
查看次数

与lodash深度比较的对象数组

我有两个与我深深比较的对象阵列 lodash

但是,我有一个问题:

> var x = [{a:1, b:2}, {c:3, d:4}];
> var y = [{b:2, a:1}, {d:4, c:3}];
> _.difference(x,y, _.isEqual);
[ { a: 1, b: 2 }, { c: 3, d: 4 } ]
Run Code Online (Sandbox Code Playgroud)

我应该如何比较看两者是否相等?

javascript arrays javascript-objects lodash

14
推荐指数
3
解决办法
2万
查看次数

如何找到两个JavaScript对象数组之间的差异?

我有两个JavaScript数组orig(原始对象数组)和update(更新的对象的orig数组),它们具有相同的长度并包含对象,我想输出每对对象之间的差异.

例:

var orig = [{enabled:"true", name:"Obj1", id:3},{enabled:"true", name:"Obj2", id:4}]; 

var update = [{enabled:"true", name:"Obj1", id:3}, {enabled:"true", name:"Obj2-updated", id:4}];
Run Code Online (Sandbox Code Playgroud)

输出应该是: name:"Obj2-updated"

我实现了一些东西,但它需要优化......

for(var prop=0; prop<orig.length; prop++) {
  for(prop=0; prop<update.length; prop++) {
    if(orig[prop].enabled != update.enabled) { console.log(update.enabled) }
    if(orig[prop].name != update[prop].name) { console.log(update[prop].name) }
    if(orig[prop].id != update[prop].id) { console.log(update[prop].id) }
  }
}
Run Code Online (Sandbox Code Playgroud)

javascript arrays data-manipulation javascript-objects difference

14
推荐指数
2
解决办法
7027
查看次数