标签: javascript-objects

在对象数组中有效地重命名/重新映射javascript/json对象键

我有一些像这样的结构化JSON数据.让我们假设这是可以互换的,通过JSON.parse():

[
    {
        "title": "pineapple",
        "uid": "ab982d34c98f"
    },
    {
        "title": "carrots",
        "uid": "6f12e6ba45ec"
    }
]
Run Code Online (Sandbox Code Playgroud)

我需要它看起来像这样,重新映射titlename,并uidid与结果:

[
    {
        "name": "pineapple",
        "id": "ab982d34c98f"
    },
    {
        "name": "carrots",
        "id": "6f12e6ba45ec"
    }
]
Run Code Online (Sandbox Code Playgroud)

最明显的做法是这样的:

str = '[{"title": "pineapple","uid": "ab982d34c98f"},{"title": "carrots", "uid": "6f12e6ba45ec"}]';

var arr = JSON.parse(str);
for (var i = 0; i<arr.length; i++) {
    arr[i].name = arr[i].title;
    arr[i].id = arr[i].uid;
    delete arr[i].title;
    delete arr[i].uid;
}
Run Code Online (Sandbox Code Playgroud)

str = '[{"title": "pineapple","uid": "ab982d34c98f"},{"title": "carrots",    		"uid": "6f12e6ba45ec"}]'; …
Run Code Online (Sandbox Code Playgroud)

javascript arrays json javascript-objects

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

仅返回Javascript中对象数组中的某些属性

如果我有这样的对象

var object = function(key,text)
{
    this.key = key;
    this.text = text;
}
Run Code Online (Sandbox Code Playgroud)

并创建这些对象的数组

var objArray = [];
objArray[0] = new object('key1','blank');
objArray[1] = new object('key2','exampletext');
objArray[2] = new object('key3','moretext');
Run Code Online (Sandbox Code Playgroud)

有没有办法我只能检索数组中所有对象的一个​​属性?例如:

var keyArray = objArray["key"]; 
Run Code Online (Sandbox Code Playgroud)

上面的例子没有将set keyArray返回给任何东西,但我希望它会被设置为这样的东西:

keyArray = [
    'key1',
    'key2',
    'key3']
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何在不迭代objArray并手动将每个键属性复制到键数组的情况下执行此操作?

javascript arrays javascript-objects

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

如何在javascript/nodejs中创建静态函数/对象(ES6)

我想使用Javascript/Node JS创建一个静态类.我使用谷歌,但我找不到任何有用的例子.

我想在Javascript ES6中创建这样的东西(C#):

public static MyStaticClass {
   public static void someMethod() {
      //do stuff here
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,我有这个类,但我认为这个代码每次从"require"调用时都会创建一个新实例.

function MyStaticClass() {
   let someMethod = () => {
      //do some stuff
   }
}
var myInstance = new MyStaticClass();
module.exports = factory;
Run Code Online (Sandbox Code Playgroud)

javascript node.js javascript-objects ecmascript-6

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

jQuery从表单字段创建对象

如何使用表单的字段和值创建对象?

像这个:

{
  fields:
   {
      name: 'foo',
      email: 'foo@moo.com',
      comment: 'wqeqwtwqtqwtqwet'     

   }
}
Run Code Online (Sandbox Code Playgroud)

假设表单看起来像这样:

<form>
  <input type="text" name="name" value="foo" />
  <input type="text" name="email" value="foo@moo.com" />
  <textarea name="comment">wqeqwtwqtqwtqwet</textarea>
</form>
Run Code Online (Sandbox Code Playgroud)

我需要知道如何为任何具有单一功能的表单执行此操作,而不仅仅是特定的表单.

javascript forms jquery javascript-objects

20
推荐指数
3
解决办法
4万
查看次数

Underscore.js groupBy具有多个值

使用Underscore.js,我试图多次对项目列表进行分组,即

然后由SIZE分组为每个SIZE,按类别分组......

http://jsfiddle.net/rickysullivan/WTtXP/1/

理想情况下,我希望有一个函数或扩展,_.groupBy()以便您可以使用参数对其进行分组.

var multiGroup = ['size', 'category'];
Run Code Online (Sandbox Code Playgroud)

可能只是混合...

_.mixin({
    groupByMulti: function(obj, val, arr) {
        var result = {};
        var iterator = typeof val == 'function' ? val : function(obj) {
                return obj[val];
            };
        _.each(arr, function(arrvalue, arrIndex) {
            _.each(obj, function(value, objIndex) {
                var key = iterator(value, objIndex);
                var arrresults = obj[objIndex][arrvalue];
                if (_.has(value, arrvalue))
                    (result[arrIndex] || (result[arrIndex] = [])).push(value);
Run Code Online (Sandbox Code Playgroud)

我的头很痛,但我觉得还有更多需要去的地方......

            });
        })
        return result;
    }
});

properties = _.groupByMulti(properties, function(item) {

    var testVal = item["size"];

    if (parseFloat(testVal)) …
Run Code Online (Sandbox Code Playgroud)

arrays javascript-objects underscore.js

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

为什么Object.keys不是Object.prototype.keys?

我想知道为什么规范定义Object.keys而不是Object.prototype.keys?如果API一致,肯定会好得多,我想理解为什么不是这样.

还有其他方法Object.prototype,为什么不是这样呢?

javascript prototype key object javascript-objects

20
推荐指数
1
解决办法
2427
查看次数

JavaScript从对象数组中获取不在另一个对象数组中的元素

我是JavaScript编程的新手,我有两个具有以下结构的对象数组:

myFirstObjArray = [{foo: 1, bar: 1}, {foo: 3, bar: 3}, {foo: 4, bar: 5}];
mySecondObjArray = [{foo: 2}, {foo: 4}, {foo: 5}];
Run Code Online (Sandbox Code Playgroud)

我需要获得两个包含key值的独立数组foo,第一个包含第一个数组但不在第二个数组中的数组,基于key的值,foo第二个包含mySecondObjArray但不在myFirstObjArray.

有没有办法做到这一点没有

for(i=0;i<myFirstObjArray.length;i++)
   for(j=0;j<mySecondObjArray .length;j++)
      {...build first array here}

for(i=0;i<mySecondObjArray .length;i++)
   for(j=0;j<myFirstObjArray.length;j++)
      {...build second array here}
Run Code Online (Sandbox Code Playgroud)

?也许我的问题是一个我没找到的重复问题,所以请保持温和.

预期产量:

firstArray = [{foo: 1}, {foo: 3}];
secondArray = [{foo: 2}, {foo: 5}];
Run Code Online (Sandbox Code Playgroud)

javascript arrays javascript-objects

20
推荐指数
2
解决办法
1961
查看次数

从回调中调用javascript对象方法

MyClass在用户脚本中定义以下及其方法:

function MyClass() {
    this.myCallback = function() {
        alert("MyClass.myCallback()");
    };

    this.startRequest = function() {
        GM_xmlhttpRequest({
            'method': 'GET',
            'url': "http://www.google.com/",
            'onload': function (xhr) {
                myClassInstance.myCallback();
            }
        });
    };
}

var myClassInstance = new MyClass();
myClassInstance.startRequest();
Run Code Online (Sandbox Code Playgroud)

此脚本有效,GM_xmlhttpRequest完成后将myCallback()调用该方法.

但是,它只能起作用,因为onload回调是指全局变量myClassInstance.如果我将onload回调更新为:

'onload': function (xhr) {
    this.myCallback();
}
Run Code Online (Sandbox Code Playgroud)

然后我得到(Chrome)错误:

未捕获的TypeError:Object [object DOMWindow]没有方法'myCallback'.

似乎this正在错误的背景下进行评估.

有没有办法调用myCallback()方法myClassInstance而不必求助于使用全局变量?

javascript callback javascript-objects

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

这个数组叫做什么...以及如何从中删除项目

我有一个我正在使用的数组,我很难描述它是什么类型的数组,这使我很难使用它.到目前为止它对我有用.我只是好奇.

我最终想要删除这个数组的结尾.

我试着.pop().grep().它不起作用.

这是我的代码示例.

var options = {};
$('.option:visible').each(function(){
     var option_label = "";
     var option_selected = [];
     var option_img = "";

     ...


     options[option_label] = {
         option_selected: option_selected,
         option_image : option_img
     };
});
Run Code Online (Sandbox Code Playgroud)

我想要做的是:

if(option_label.indexOf("something") != -1) {
   //then pop off options
} 
//continue about your business
Run Code Online (Sandbox Code Playgroud)

为了澄清,我不知道确切的标题option_label.

javascript arrays javascript-objects

19
推荐指数
1
解决办法
432
查看次数

深度展平JavaScript对象递归

数据:

var data = [
    {
      "id": 1,
      "level": "1",
      "text": "Sammy",
      "type": "Item",
      "items": [
        {
          "id": 11,
          "level": "2",
          "text": "Table",
          "type": "Item",
          "items": [
            {
              "id": 111,
              "level": "3",
              "text": "Dog",
              "type": "Item",
              "items": null
            },
            {
              "id": 112,
              "level": "3",
              "text": "Cat",
              "type": "Item",
              "items": null
            }
          ]
        },
        {
          "id": 12,
          "level": "2",
          "text": "Chair",
          "type": "Item",
          "items": [
            {
              "id": 121,
              "level": "3",
              "text": "Dog",
              "type": "Item",
              "items": null
            },
            {
              "id": 122, …
Run Code Online (Sandbox Code Playgroud)

javascript recursion javascript-objects lodash

18
推荐指数
4
解决办法
8407
查看次数