相关疑难解决方法(0)

克隆整个JavaScript ScriptEngine

我需要以某种方式深度克隆我的ScriptEngine对象的整个绑定集.

我试过了什么

  • 到目前为止,我已经尝试过Cloner库来克隆整个Bindings结构.如果它有用,那将是很好的,因为它可以确保精确的副本,包括私有变量.但这会导致jvm堆损坏(jvm只是崩溃,退出代码为-1073740940).有时它不会崩溃,但会发生奇怪的事情,比如System.out.println()停止工作应该......

  • 我还研究了使用ScriptEngine中的js代码克隆对象,这样我就可以将它们作为NativeObjects获取并在一些java地图中管理它们.但是我发现的所有克隆方法都存在缺陷.我想要一个精确的对象快照.例如,如果每两个对象A和B的包含字段(比如a.fa和b.fb),其引用相同的对象C,使用克隆时jQuery.extend()(例如)的字段a.fab.fb克隆的a和b的将引用的不同的克隆c,而不是引用一个相同的克隆.还有许多其他边缘问题.

  • 我还尝试使用Cloner克隆整个ScriptEngine(不仅仅是绑定),我还尝试使用Rhino的js引擎并克隆整个范围(而不是Bundeled ScriptEngine包装器).但堆腐败问题仍然存在.

为什么我需要这样做

我需要这个,因为我必须能够将整个ScriptEngine绑定的值恢复到之前的某个点.我需要制作绑定的精确快照.

该应用程序是我的博士研究项目的一部分,该项目包括运行状态机和节点(在java中实现),其中附带了js代码.js代码由最终用户输入,并且在运行时被逐出.当无法通过路径到达最终状态时,算法会向后退步,尝试查找备用路径.在每个步骤向后,它必须撤消js引擎绑定中可能发生的任何更改.


所有全局变量名称在js evaling之前都是已知的,并且是对象(用户在节点的代码中键入,然后将其组织(在java中)到具有某些名称模式的js对象中).但是他们的内容可以是任何东西,因为它是由用户js代码控制的.

所以我想我现在唯一的解决方法是使用js代码克隆js对象.

javascript java clone rhino scriptengine

6
推荐指数
1
解决办法
1164
查看次数

Javascript:获取前一周的周一和周日

我使用以下脚本获取前一周的周一(第一个)和周日(最后一个):

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的新手,还有另外一种方法可以获得这些日期吗?

javascript

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

如何在JavaScript中创建新对象?

为什么这不起作用?

    var sheep = function(options){
        this.options = {sizes: 100,
                        eat: 100,
                 colors: 'white', 
                 running: function () {
                     return this.sizes + this.eat;
                 }
          }
    };

    var blacksheep = new sheep({colors:'black'});       

    alert('blackcsheep color is ' + blacksheep.colors);//error undefined
    alert('blackcsheep color is ' + blacksheep.options.colors);// it return white
    alert('blackcsheep running is ' + blacksheep.running());//error
Run Code Online (Sandbox Code Playgroud)

javascript

6
推荐指数
1
解决办法
251
查看次数

JavaScript如何从复制的对象中删除密钥?

我有查询对象

var q = {
    age: 10, 
    'profile.contry': 'india'
};
Run Code Online (Sandbox Code Playgroud)

现在我复制q变量并从重复变量中删除键.

var duplicateQ = q;
delete duplicateQ['profile.contry']; // I have removed 'profile.country' from duplicateQ.

console.log(q); //Object { age: 10 }
console.log(duplicateQ); //Object { age: 10 }
Run Code Online (Sandbox Code Playgroud)

为什么两个变量都受到影响?我怎样才能从其中一个中删除该属性?

javascript jquery

6
推荐指数
2
解决办法
2619
查看次数

Object.assign保持对原始对象的引用

我有方法:

export const groupActivities = ({ activities, tags, images, tickets }) => {
  if (!activities || !tags) {
    console.error('Must have activities and tags');
  }

  const groupActivities = Object.assign({}, activities);

  const groups = groupByTags({ activities: groupActivities, tags });

  groups.forEach(group => {
    group.length = group.activities.length;
    console.log(group.length);
    group.activities.forEach(activity => {
      if (images) {
        activity.images = activity.imageIds.map(id => images[id]);
      }

      if (tickets) {
        console.warn('No tickets provided to the groupactivities helper. May cause problems.');
        activity.tickets = activity.ticketIds.map(id => tickets[id]);
      }
    });
  });

  return groups;
}; …
Run Code Online (Sandbox Code Playgroud)

javascript babeljs

6
推荐指数
1
解决办法
4969
查看次数

获取父元素及其所有子元素的数组

假设我有这种数据......

data = [{
    "_id" : "1",
    "parentId" : "thisPostId",
    "topLevelId" : "1",
    "text" : "<p>comment</p>",
},
{
    "_id" : "2",
    "parentId" : "1",
    "topLevelId" : "1",
    "text" : "<p>reply to comment</p>",
},
{
    "_id" : "3",
    "parentId" : "2",
    "topLevelId" : "1",
    "text" : "<p>reply to reply to comment</p>",
},
{
    "_id" : "4",
    "parentId" : "3",
    "topLevelId" : "1",
    "text" : "<p>reply to reply to reply to comment</p>",
}]
Run Code Online (Sandbox Code Playgroud)

我需要删除评论及其所有孩子......

如果注释删除是_id:1,那么我需要一个数组["1","2","3","4"],,,然后我可以运行Coll.remove({_id:{$in:["1","2","3","4"]}}, callback);

如果注释要删除 …

javascript arrays underscore.js lodash

6
推荐指数
1
解决办法
652
查看次数

如何从对象中破坏部分属性

例如,我有一个像这样的对象:

obj1 = {
     name: 'Bob',
     age:  20,
     career: 'teacher'
  }
Run Code Online (Sandbox Code Playgroud)

现在我需要复制其部分属性而不是所有属性.

obj2 = {
     name: '',
     age: '',
  }
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做obj2.name = obj1.name,如果需要复制许多属性,这将是冗长的.还有其他快速方法可以解决这个问题吗?我试过了

let {name: obj2.name, age: obj2.age} = obj1;

但是得到了错误.

javascript ecmascript-6

6
推荐指数
1
解决办法
294
查看次数

捕获变量的当前值

我有一个myVariable不断变化的变量。在某些时候,我想捕捉的myVariable(不是引用myVariable)到另一个变量myVariableAtSomePoint

示例代码:

var myVariable = 1;

function test () {
    var myVariableAtSomePoint= myVariable;
    console.log(myVariableAtSomePoint);
}

myVariable = 2;

test(); // Prints 2, instead of 1.
Run Code Online (Sandbox Code Playgroud)

javascript

5
推荐指数
1
解决办法
7164
查看次数

对于JavaScript多维数组的深层副本,深入一层似乎就足够了。这是真的吗?

注意:我只是一个新手程序员,所以这个问题的核心可能是明显的错误或误解。

本质上,我需要将JavaScript中的“按值”多维数组深度复制到未知深度。我认为这将需要一些复杂的递归,但是似乎在JavaScript中,您只需要复制一个级别就可以按值复制整个数组。

举个例子,这是我的测试代码,它使用了一个故意卷积的数组。

function test() {
  var arr = [ ['ok1'],[],[ [],[],[ [], [ [ ['ok2'], [] ] ] ] ] ];
  var cloned = cloneArray(arr);
  arr = '';   // Delete the original
  alert ( cloned );
}


function cloneArray(arr) {  
  // Deep copy arrays. Going one level deep seems to be enough.
  var clone = [];
  for (i=0; i<arr.length; i++) {
    clone.push( arr[i].slice(0) )
  }
  return clone;
}
Run Code Online (Sandbox Code Playgroud)

在我运行此测试(Ubuntu上最新稳定的Chrome和Firefox)的过程中,即使删除了原始数组,即使数组最深的部分也似乎已成功通过克隆中的值成功复制,即使slice_()复制”仅深入了一层。这是JavaScript中的标准行为吗?我可以依靠它来运行较旧的浏览器吗?

javascript arrays multidimensional-array

5
推荐指数
1
解决办法
3341
查看次数

d3js在编码解码数据之后工作

我正在研究d3js和分层布局的数据可视化.我的数据如下:

       0
     / | \
    /  |  \ 
   1   5   3
    \  |   |
     \ |   |
       4  /
       | /
       2
Run Code Online (Sandbox Code Playgroud)

因为我无法链接到多个父节点,所以我复制了显示的节点:

       0
     / | \
    /  |  \ 
   1   5   3
   |   |   |
   |   |   |
   4   4   |
   |   |   |
   2   2   2
Run Code Online (Sandbox Code Playgroud)

我做了一个小提琴演示来展示我的问题:

  • 当我在JSON输入中使用正确的数据时,我有良好的布局(蓝色边框图形).
  • 当我使用循环来解析我的JSON输入时,我有奇怪的图形(绿色边框图形).

这是我用来解析输入的循环:

for (i in root[2].Arcs){
  var d = root[1].Nodes[root[2].Arcs[i].D];
  var s = root[1].Nodes[root[2].Arcs[i].S];
  if (!d.children){
    d.children = [];
  }
  d.children.push(s);
}
Run Code Online (Sandbox Code Playgroud)

对我来说:控制台中的两个打印元素都是相同的,但不是布局的渲染.对象引用中可能存在一些不同之处.

我发现一个糟糕的解决方案是解码然后编码我的var:

    var root …
Run Code Online (Sandbox Code Playgroud)

javascript json d3.js

5
推荐指数
1
解决办法
245
查看次数