在以下情况下,我发现 lodash 似乎没有复制源对象的 getter:
const _ = require("lodash");
let sourceObject = { };
Object.defineProperty(sourceObject, "abc", {
get: () => 123
});
let cloneObject = _.cloneDeep(sourceObject);
console.log(sourceObject.abc); // 123
console.log(cloneObject.abc); // undefined
Run Code Online (Sandbox Code Playgroud)
有没有办法用lodash模块实现上述目的?
我正在使用 js 对象,可以说:
items: [{text: 'text1', active: true},
{text: 'text1', active: true},
{text: 'text1', active: true}]
Run Code Online (Sandbox Code Playgroud)
我想制作对象的副本并在计算属性中对它们进行一些更改,如下所示:
computed: {
copyAndChange() {
var itemsCopy = []
itemsCopy = this.items
for (var i=0; i<itemsCopy.length; i++) {
itemsCopy[i].text = "something"
console.log('text from items: ' + this.item[i])
console.log('text from itemsCopy: ' + itemsCopy[i])
}
return itemsCopy
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码在控制台中给了我:
text from items: something
text from itemsCopy: something
text from items: something
text from itemsCopy: something
text from items: something
text from itemsCopy: something
Run Code Online (Sandbox Code Playgroud)
(?) …
我在这里看了很多关于克隆和复制javascript对象的帖子,特别是这两个主题:
不过,这似乎对我不起作用.
这是我正在使用的一段代码:
var copiedObject = {};
$.getJSON(URL, null, function (data) {
copiedObject = jQuery.extend(true, {}, data);
});
console.log(JSON.stringify(copiedObject));
Run Code Online (Sandbox Code Playgroud)
如果我在JSON调用中有我的控制台日志功能,它会输出正确的值,但在函数之后,它会被清空并输出{}.
我试过使用copiedObject = JSON.parse(JSON.stringify(data)),以及clone(obj)"在Javascript中复制一个对象"的功能,一切都无济于事.
我错过了什么吗?
我想知道为什么会这样?
我有一个存储在var myObj中的json对象:
var myObj = JSON.parse(fs.readFileSync('json/data.json', 'utf8'));
Run Code Online (Sandbox Code Playgroud)
然后我通过以下方式从原始对象中获取克隆:
var modObj = myObj;
Run Code Online (Sandbox Code Playgroud)
之后我从clone中删除空值:
cleansedObj = removeEmpty(modObj);
Run Code Online (Sandbox Code Playgroud)
为什么这也会改变原始的myObj并从中删除空值?
这是功能:
function removeEmpty(obj) {
Object.keys(obj).forEach(function(key) {
if (obj[key] && typeof obj[key] === 'object') removeEmpty(obj[key])
else if (obj[key] === "") delete obj[key]
});
return obj;
};
Run Code Online (Sandbox Code Playgroud)
我通过这样做找到了一种解决方法,但似乎是不成功的操作:
var cleansedObj = JSON.stringify(myObj);
cleansedObj = removeEmpty(JSON.parse(cleansedObj));
Run Code Online (Sandbox Code Playgroud)
谢谢!
如何在一个对象上提供Object.Freeze?
下面是我下面创建,其中例如a,我复制a的b,冻结b,并尝试重新分配一个值a.但它已不再可能.为什么?我如何freeze只对一个对象做?
谢谢!
let a = { "teste" : [1,2,3] }
// I want 'b' freezed
const b = a;
Object.freeze(b);
a.teste = [4,5,6]
console.log(a)Run Code Online (Sandbox Code Playgroud)
制作gwt叠加类型的深层副本的最佳方法是什么?
我正在寻找一个功能或库来检查GWT覆盖并克隆它.它必须能够克隆包含的数组或对象.
谢谢
我正在尝试创建对象 a 的副本,而不必手动将其属性输入到对象 b 中。在此代码中,b 仅引用 a。我想创建一个新版本的a,这样当我向b添加属性时,通过a看不到它。
var a = new Object(); // create an empty object
var b = a; // now b refers to the same object
b.test = 1; // add a new property to b
alert(a.test); // => 1: the new property is also visible through a
a === b; // => true: a and b refer to the same object
Run Code Online (Sandbox Code Playgroud) 在我介绍这些数字之前,我不明白为什么包含的console.log显示.定期显示正确的内部结构.有人可以解释一下Google Chrome中的这种行为/错误吗?
https://jsfiddle.net/ZSvyt/d1[100,200,300]for loopd1console.log
var container = {};
container["0"] = [10, 20, 30];
var d1 = container;
console.log('before console.log');
console.log(d1); // <--- IT DISPLAYS [100, 200, 300]. WHY?
// before for loop
console.log('before for loop');
for (var i = 0; i < d1["0"].length; i++) {
console.log(d1["0"][i]);
}
container["0"] = [100, 200, 300];
console.log('after console.log');
console.log(d1);
// after for loop
console.log('after for loop');
for (var i = 0; i < d1["0"].length; i++) {
console.log(d1["0"][i]); …Run Code Online (Sandbox Code Playgroud) 有没有办法在JavaScript中为数组的每个对象添加相同的项目val ="4"?
让我们说有
var arr = [{"num":"111"},{"ttt":"123","rss":"456"},...];
Run Code Online (Sandbox Code Playgroud)
我想得到
arr2 = [{"num":"111", "val":"4"},{"ttt":"123", "rss":"456", "val":"4"},...];
Run Code Online (Sandbox Code Playgroud)
是否可以在一行中使用.push()数组或类似的东西?
我有两个相同类型的对象,我想将其中一个的内容复制到另一个。
const Invoice1 = new InvoiceModel();
const Invoice2 = new InvoiceModel();
Run Code Online (Sandbox Code Playgroud)
现在为了具有以下内容:Invoice2 = Invoice1
看完之后 :
我尝试使用以下任何命令,但所有命令都说在运行时未定义invoice2:
Invoice2 = { ...Invoice1 }; //OR
Invoice2 = Object.assign({}, Invoice1); //OR
Invoice2 = JSON.parse(JSON.stringify(Invoice1));
Run Code Online (Sandbox Code Playgroud)
最后,通过阅读本文(https://medium.com/@Farzad_YZ/3-ways-to-clone-objects-in-javascript-f752d148054d),我使用了此功能来复制对象的内容:
function CopyObject(src, target) {
for (let prop in src) {
if (src.hasOwnProperty(prop)) {
target[prop] = src[prop];
}
}
return target;
}
Run Code Online (Sandbox Code Playgroud)
我想知道除了使用上面的功能以外,还有没有更清洁的方法?
我已经阅读了许多有关此问题的文章,但所有这些文章都创建了一个新对象。