我正在尝试定义一个对象并为其创建一个访问器属性.
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文件中看到了这个:
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) 我有两个与我深深比较的对象阵列 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数组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
我明白使用Object.create(null)创建一个没有proto属性的对象(即Object.getPrototypeOf( myObj ) === null)但有人可以帮助我理解这个用例是什么?
换句话说,为什么要创建一个完全为空的对象(即不从中继承任何方法Object.prototype)?
我有一个像下面这样的对象数组.
{name: "Mc Donald", quantity: 4, maleCount: 1, femaleCount: 0}
{name: "KFC", quantity: 9, maleCount: 1, femaleCount: 0}
{name: "KFC", quantity: 9, maleCount: 1, femaleCount: 0}
{name: "Mc Donald", quantity: 4, maleCount: 0, femaleCount: 1}
{name: "KFC", quantity: 9, maleCount: 0, femaleCount: 1}
{name: "KFC", quantity: 9, maleCount: 1, femaleCount: 0}
{name: "KFC", quantity: 9, maleCount: 0, femaleCount: 1}
{name: "KFC", quantity: 9, maleCount: 0, femaleCount: 1}
Run Code Online (Sandbox Code Playgroud)
我想将它们分组并将其中的所有值相加.例如,决赛将是这样的:
{name: "Mc Donald", quantity: 8, maleCount: 1, femaleCount: 1}
{name: "KFC", quantity: …Run Code Online (Sandbox Code Playgroud) 看看这段代码.这是一个非常简单的JavaScript对象,它使用Module Pattern实现(你可以看到这个小提琴地址的实例)
var human = function() {
var _firstName = '';
var _lastName = ''
return {
get firstName() {
return _firstName;
}, get lastName() {
return _lastName;
}, set firstName(name) {
_firstName = name;
}, set lastName(name) {
_lastName = name;
}, get fullName() {
return _firstName + ' ' + _lastName;
}
}
}();
human.firstName = 'Saeed';
human.lastName = 'Neamati';
alert(human.fullName);
Run Code Online (Sandbox Code Playgroud)
但是,IE8不支持JavaScript get和set关键字.您可以测试它并查看MDN.
我该怎么做才能使这个脚本与IE8兼容?
javascript getter setter internet-explorer-8 javascript-objects
在页面加载,我创建了两个JavaScript对象,objDemo1而objDemo1Backup其中后者仅仅是第一的精确副本.
例如
objDemo1 {
sub_1 = { something: 123, somethingElse: 321 },
sub_2 = { something: 456, somethingElse: 654 }
}
Run Code Online (Sandbox Code Playgroud)
我可以修改值sub_以及添加/删除新sub_的但是我正在编辑的唯一对象是objDemo1.即我永远不会改变objDemo1Backup
我有一个重置按钮,单击该按钮将重置objDemo1为最初加载页面时的状态(即objDemo1 = objDemo1Backup).这是我遇到问题的地方..
如何设置objDemo1到objDemo1Backup?
我试过了:
objDemo1 = objDemo1Backup;
Run Code Online (Sandbox Code Playgroud)
和
objDemo1 = null;
var objDemo1 = objDemo1Backup;
Run Code Online (Sandbox Code Playgroud)
...以及类似的变化,但似乎没有任何工作.有任何想法吗?
objDemo1Backup它与我创建它并objDemo1更改时完全相同.objDemo1 = objDemo1Backup...我只是无法弄清楚替换对象的语法.我遇到了一段奇怪的代码片段,我根本无法理解,这里是:
var obj = function() {};
obj.prototype.x = 5;
var instance1 = new obj();
obj.prototype = {y: 6};
var instance2 = new obj();
console.log(instance1.x, instance1.y, instance2.x, instance2.y);
// 5, undefined, undefined, 6
Run Code Online (Sandbox Code Playgroud)
现在,问题是:
5, undefined, undefined, 6而不是undefined, 6, undefined, 6?每个解释都表示赞赏.
这是我的代码
var studentsList = [
{"Id": "101", "name": "siva"},
{"Id": "101", "name": "siva"},
{"Id": "102", "name": "hari"},
{"Id": "103", "name": "rajesh"},
{"Id": "103", "name": "rajesh"},
{"Id": "104", "name": "ramesh"},
];
function arrUnique(arr) {
var cleaned = [];
studentsList.forEach(function(itm) {
var unique = true;
cleaned.forEach(function(itm2) {
if (_.isEqual(itm, itm2)) unique = false;
});
if (unique) cleaned.push(itm);
});
return cleaned;
}
var uniqueStandards = arrUnique(studentsList);
document.body.innerHTML = '<pre>' + JSON.stringify(uniqueStandards, null, 4) + '</pre>';Run Code Online (Sandbox Code Playgroud)
产量
[
{
"Id": "101",
"name": "siva"
}, …Run Code Online (Sandbox Code Playgroud) javascript ×10
arrays ×3
prototype ×2
difference ×1
getter ×1
grouping ×1
lodash ×1
object ×1
properties ×1
reset ×1
setter ×1