如果key不存在,如何在节点js数组中插入新对象

时间:2017-03-07 14:44:32

标签: javascript node.js

我想创建类似的数据结构。

Var ans =[{"b":[1,2]},{"g":[100,2]}]

如果列表ans中不存在键,我想在列表中创建一个新对象。 否则,如果密钥存在于ans列表的一个对象中,那么我想将新值添加到ans list

的对象中

例如:

Example 1) new data c:{2000}

然后

Var ans =[{"b":[1,2]},{"g":[100,2]},{c:[2000]}]

示例2)新数据g:{50}

然后

Var ans =[{"b":[1,2]},{"g":[100,2,500]},{c:[2000]}]

我是节点js的初学者,理解数组,对象概念,但没有得到确切的逻辑! 谢谢!

3 个答案:

答案 0 :(得分:2)

您可以尝试以下操作:

逻辑

  • 根据键
  • 过滤数组
  • 检查提到的密钥是否存在。
  • 如果是,请将值推送到此数组。
  • 如果没有,请创建一个虚拟对象并将此对象推送到原始数组。

更正,当您执行.push({key: value})时,key将被视为字符串。

<强>候补

  1. 如果您使用的是ES6,.push({ [key] : value })
  2. 创建一个虚拟对象var o = {}。将密钥和值设置为o[key] = value并推送此对象。
  3. <强>的优化

    • 不要像obj[key] = value那样设置值,因为我们将在数组上运行,请尝试obj[key] = [].concat(value)。这将使您能够将值作为数字或值数组传递。
    • 不是检查.filter中是否存在值,而是尝试Array.isArray检查值是否存在且类型为数组。

    自定义功能

    &#13;
    &#13;
    function checkAndPush(array, key, value) {
      var filteredList = array.filter(function(o) {
        return Array.isArray(o[key]);
      });
    
      filteredList.length > 0 ? filteredList[0][key].push(value) : array.push({
        [key]: [].concat(value)
      });
      return array;
    }
    
    var ans =[{"b":[1,2]},{"g":[100,2]}]
    
    console.log(checkAndPush(ans, "c", [2,3]))
    console.log(checkAndPush(ans, "c", 4));
    &#13;
    &#13;
    &#13;

    原型功能

    &#13;
    &#13;
    Array.prototype.checkAndPush = function(key, value) {
      var filteredList = this.filter(function(o) {
        return Array.isArray(o[key]);
      });
      var dummy = {}
      dummy[key] = [].concat(value)
    
      filteredList.length > 0 ? filteredList[0][key].push(value) : this.push(dummy);
      //  or ES6: this.push({ [key]: [].concat(value) })
      return this;
    }
    
    var ans =[{"b":[1,2]},{"g":[100,2]}]
    
    console.log(ans.checkAndPush("c", [2,3]))
    console.log(ans.checkAndPush("c", 4));
    &#13;
    &#13;
    &#13;

答案 1 :(得分:1)

如果您正在处理对象作为您的值

ans[key] = ans[key] || []
ans[key].push(value)

注意,这是有效的,因为您的值将是一个数组。如果它们可能是原始的,那么你可以使用hasOwnProperty进行检查。

if (ans.hasOwnProperty(key)) {
  // Add this to your key somehow
} else {
  // initialize the key with your value
}

答案 2 :(得分:0)

Node.js只是一个基于javascript构建的库。你可以使用javascript类型的progmming做任何事情。但是push和pop方法应该能够帮助你处理nodejs数组。 ANS [键] .push(值)