是否可以重写以下JavaScript递归函数以使其更快?
function clone_recursive(object) {
var result = {};
for (var key in object) {
var value = object[key];
if (typeof value === 'object') {
result[key] = clone_recursive(value);
} else {
result[key] = value;
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我以迭代的方式重写了它,但它没有获得任何性能,实际上速度下降了≈20%.
function clone_iterative(object) {
var result = {};
var queue = [{base: result, value: object}];
var item;
while (item = queue.shift()) {
var current = item.value;
var base = item.base;
for (var key in current) {
var value = current[key];
if (typeof …Run Code Online (Sandbox Code Playgroud) 我正在寻找修改和数组响应和插入特定索引上的元素.这就是我的状态:
this.state = {arr: ['', '', '', '' ]}
Run Code Online (Sandbox Code Playgroud)
我想做的是编译它arr[index] = 'random element'以反应js setState语法.我试图做的是:
this.setState({ arr[index]: 'random element' })
Run Code Online (Sandbox Code Playgroud)
但是失败了,ty!
在页面加载,我创建了两个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 data = w2ui.grid.records,
exclude = Array('recid', 'w2ui'); // Exclude these data points from the pivot
// Modify our tempData records to remove HTML
$.each(data, function(key, value) {
$.each(value, function(_key, _value) {
if(jQuery.inArray(_key, exclude) != -1) {
delete data[key][_key];
}else{
data[key][_key] = $('<div>'+_value+'</div>').text(); // <div></div> for those which are simply strings.
}
});
});
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我创建了一个名为的变量data并将其设置为我的"源数据".
我希望能够对这个新的数据变量进行更改,但看起来在对其进行更改时,源数据正在被更改(w2ui.grid.records).
有没有正确的方法来克隆这个集合,所以我可以有一个新的数据实例来修改?
考虑下面的代码或检查这个小提琴.
var obj = {
name: "abc",
age: 20
}
var objTwo;
console.log(obj.age);
objTwo = obj;
objTwo.age = 10;
console.log(obj.age);
Run Code Online (Sandbox Code Playgroud)
我创建了一个名为obj的对象,它有两个属性.现在我将obj分配给另一个名为objTwo的对象.现在我更新objTwo中的一个属性.同样的变化也反映在obj上.如何在不创建引用的情况下将值从一个对象分配给另一个对象?
我试图找出一种方法来深度克隆 JS 类实例,同时保留链中的所有原型。
我已经看到了如何深度克隆和对象:
JSON.parse(JSON.stringify(instance))
Run Code Online (Sandbox Code Playgroud)
我已经看到了如何制作类实例的浅拷贝:
Object.assign( Object.create( Object.getPrototypeOf(instance) ), instance)
Run Code Online (Sandbox Code Playgroud)
但我的问题是,有没有办法深度克隆一个类的实例?
你能告诉我如何在Javascript中解冻一个冻结的对象,以便我能够修改它的属性吗?
var pizza = {
name: 'Peri Peri',
Topping: 'Prawn'
};
Object.freeze(pizza);
// Can't change the name of the object because it's frozen
pizza.name = 'Hawaiian';
Run Code Online (Sandbox Code Playgroud) 有人能解释angular.copy()和JSON.parse(JSON.stringify())之间的区别吗?有吗?你会建议使用什么?angular.fromJson(angular.toJson())是否与JSON.parse(JSON.stringify())相同?
我只想提一下,我如何正确克隆JavaScript对象?对于angular.copy()的JSON.parse(JSON.stringify())和angular.copy()引用.
我的理解是,我可以使用指令 @Input() 将数据传递给子组件,并使用 @Output() 和适当的发射将数据发送回父组件。但我不知道 @Input() 字段中的更改数据会发送到父级。它是否正确?
我修改了组件通信工作簿以重现此https://input-params.stackblitz.io
你可以解释吗?
谢谢,
我使用以下脚本获取前一周的周一(第一个)和周日(最后一个):
var curr = new Date; // get current date
var first = curr.getDate() - curr.getDay() - 6; // Gets day of the month (e.g. 21) - the day of the week (e.g. wednesday = 3) = Sunday (18th) - 6
var last = first + 6; // last day is the first day + 6
var startDate = new Date(curr.setDate(first));
var endDate = new Date(curr.setDate(last));
Run Code Online (Sandbox Code Playgroud)
如果上个星期一和星期天也在同一个月,这个工作正常,但我今天才注意到,如果今天是12月,而上个星期一是11月,它就不起作用.
我是JS的新手,还有另外一种方法可以获得这些日期吗?