相关疑难解决方法(0)

克隆对象TypeScript

我正在使用TypeScript处理Angular 2.我有用户管理组件,我有整个用户的表.

当单击表中的任何用户时,然后形成具有要编辑的整个属性的外观.选择用户发生事件如下:

 onUserSelected(event) {
        var selectedId = event.data.id;
        this.selectedUser = this.users.filter(user => user.id === selectedId)[0]
    }
Run Code Online (Sandbox Code Playgroud)

问题是当正在编辑selectedUser时,他的属性也会在表中发生变化而且看起来不太好.我尝试自己创建副本如下,但它没有帮助 - 用户类

 clone() {
        var cloned = new User(this.id, this.login, this.name, this.surname, this.phone);
        return cloned;
    }
Run Code Online (Sandbox Code Playgroud)

也许我正在做一些在Angular2中不好的做法?

typescript angular

19
推荐指数
3
解决办法
6万
查看次数

如何克隆js对象?

可能重复:
克隆JavaScript对象的最有效方法是什么?

如何使用以下引用克隆js对象:

{ ID: _docEl,
  Index: next,
  DocName: _el
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

javascript

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

从冻结的父对象创建新对象

此示例创建一个对象,冻结它,然后从冻结对象创建一个新对象.如果第二个对象尝试更改测试属性,则不能.它保持冻结,第一个对象的值为10.

//Create an object and freeze it

var first = {
    test: 10
};
Object.freeze(first);

//Create a second object from the first one and
//try and change the new test property (you can't)

var second = Object.create(first);
second.test = 20;
console.log(second.test); //10
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

second.test新对象的新属性,还是只是对冻结的第一个对象中的属性的引用?
是否可以将冻结first.test用作默认值,但是second.test如果需要则覆盖它?

我问的原因是因为我想将一个不可变的基础对象作为具有默认值的模板,然后使用它来创建我可以自定义的新对象.对此最好的方法是什么?

谢谢!

javascript inheritance prototypal-inheritance

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

在改变事件时,Vuejs会获得旧值

请参阅下面的我的代码段.如何获得已更改模型的旧值,在这种情况下是vuejs中的年龄?

var app = new Vue({
  el:"#table1",
  data:{
   items:[{name:'long name One',age:21},{name:'long name Two',age:22}]
  },
  methods:{
    changeAge:function(item,event){
      alert(item.age);
    }
  }
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://unpkg.com/vue/dist/vue.js"></script>

<table class="table table-cart" id="table1">
   <thead>
     <tr>
       <th>Name</th>
       <th>Age</th>
     </tr>
  </thead>
   <tbody>
     <tr v-for="(item,index) in items">
       <td>{{item.name}} :</td>       
       <td>
         <input type="text" name="qty"
                v-model="item.age"   
                @change="changeAge(item,$event)">
       </td>
     </tr>
   </tbody>
 </table>
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用手表,但我无法找到任何帮助来观察一系列物品的年龄.

javascript jquery vue.js vuejs2

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

React:无法添加属性“X”,对象不可扩展

我正在我的组件中接收道具。我想在这个组件中添加一个带有道具的属性“LegendPosition”。我无法做到这一点。请帮我解决一下这个。我已经尝试过这段代码,但没有成功:

var tempProps     = this.props;
tempProps.legendPosition = 'right';
Object.preventExtensions(tempProps);

console.log(tempProps);
Run Code Online (Sandbox Code Playgroud)

javascript object reactjs

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

Javascript克隆对象失去了原型函数

我试图在Javascript中克隆一个对象.我已经创建了自己的"类",它具有原型功能.

我的问题:当我克隆一个对象时,克隆无法访问/调用任何原型函数.

当我去访问克隆的原型函数时,我收到一个错误:

clone.render不是一个函数

你能告诉我如何克隆一个对象并保持其原型功能

这个简单的JSFiddle演示了我得到的错误:http://jsfiddle.net/VHEFb/1/

function cloneObject(obj) 
{
   // Handle the 3 simple types, and null or undefined
   if (null == obj || "object" != typeof obj) return obj;

   // Handle Date
   if (obj instanceof Date) {
     var copy = new Date();
     copy.setTime(obj.getTime());
     return copy;
   }

   // Handle Array
   if (obj instanceof Array) {
     var copy = [];
     for (var i = 0, len = obj.length; i < len; ++i) {
         copy[i] = cloneObject(obj[i]);
     } …
Run Code Online (Sandbox Code Playgroud)

javascript

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

使用JSON.stringify进行深度比较和克隆是否可以?

在尝试了几个实现深度比较和复制JSON可序列化对象之后,我注意到最快的只是:

function deep_clone(a){
   return JSON.parse(JSON.stringify(a));
};
function is_equal(a,b){
    return JSON.stringify(a) === JSON.stringify(b);
};
Run Code Online (Sandbox Code Playgroud)

不过,我觉得这是作弊.就像我会发现一些会在将来惹恼我的问题.使用它们可以吗?

javascript json equality deep-copy object-comparison

13
推荐指数
2
解决办法
7173
查看次数

jquery.extend(true,[],obj)没有创建深层副本

jsFiddle在这里.

如果深度复制工作,输出将是"好奇的乔治"而不是"安德的游戏".我怎样才能制作深层照片?这个问题的答案表明$.extend(true, [], obj)创建了一个深层副本.然而我的例子表明它没有.

function Person(){}
Person.prototype.favorite_books = [];

var george = new Person();
george.favorite_books = ["Curious George"];

var kate = new Person();
kate.favorite_books = ["The Da Vinci Code", "Harry Potter"];

var people = [kate, george];

var people_copy = $.extend(true, [], people);
people_copy[0].favorite_books[0] = "Ender's Game";

$('#text').text(people[0].favorite_books[0]);
Run Code Online (Sandbox Code Playgroud)

我更新了jsFiddle.事实证明,如果对象是自定义对象(即$.isPlainObject返回false),我需要单独深度复制数组中的每个对象.

javascript jquery

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

材料表类型错误:无法添加属性表数据,对象不可扩展

我正在meterial-tableReact. 我正在尝试从来自这样的 api 的数组中分配数据

<MaterialTable
  columns={columns}
  data={rows}
  ...
/>
Run Code Online (Sandbox Code Playgroud)

在哪里columnsrows在API数据。但我收到此错误:

TypeError: Cannot add property tableData, object is not extensible
Run Code Online (Sandbox Code Playgroud)

值得注意的是,当我使用模拟硬编码数据时,一切正常。经过一番搜索,我找不到任何解决方案,有什么帮助吗?

javascript reactjs material-ui axios material-table

12
推荐指数
2
解决办法
5128
查看次数

如何在JavaScript中深层复制自定义对象?

我一直在这里冲浪一段时间,仍然没有找到适合我的答案.

有没有办法在JS中深层复制非普通对象?

我已经尝试了,jQuery.extend(true, {}, this)但它只克隆了一些,剩下的仍然是另一个对象的参考.

javascript clone object

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