【问题标题】:Remove object from array where sub-object matches a value从数组中删除子对象与值匹配的对象
【发布时间】:2017-01-30 19:47:21
【问题描述】:

我目前正在尝试根据查询字符串对某些值进行排序。我可以在这个循环中单独定位每个target,但似乎无法正确地将它们从数组中删除。如何从targetList 中删除与target.target 匹配的某些值?'

targetList.forEach(function(target, key) {
    var os = getParameterByName('os');

    if (os == "android") {
        if (target.target.includes(":IOS")) {
            targetList.splice(key, 1);
        }
    } else if (os == "ios") {
        if (target.target.includes(":ANDROID")) {
            targetList.splice(key, 1);
        }
    }

    if (target.target.includes(":IOS")) {
        target.target = schools[target.target.replace(":IOS", "").toLowerCase()] + " (iOS)" || target.target;
    }

    if (target.target.includes(":ANDROID")) {
        target.target = schools[target.target.replace(":ANDROID", "").toLowerCase()] + " (Android)" || target.target;
    }

});

targetList 包含一个这样的数组:

[
  {
    "target": "t1",
    "datapoints": [
      [
        51.0,
        1483574400.0
      ],
      [
        54.0,
        1485561600.0
      ],
      [
        54.0,
        1485648000.0
      ]
    ]
  },
  {
    "target": "t2",
    "datapoints": [
      [
        56.0,
        1484265600.0
      ],
      [
        70.0,
        1484352000.0
      ],
      [
        71.0,
        1484438400.0
      ],
      [
        51.0,
        1484611200.0
      ]
    ]
  },
]

我正在尝试做的是目标匹配某些条件.includes() 我想删除整个包含对象/数组。

【问题讨论】:

  • getParameterByName() 做了什么并返回?
  • 我的错,该函数只返回查询字符串的值。它根据我输入的内容返回正确的值。
  • 创建一个重现问题的演示,所有条件都不适用于显示的虚拟数据
  • 基本上 splice 实际上并没有拼接出我告诉它的值。如果 JSON 的目标包含 :IOS 或 :ANDROID,它应该从数组中删除整个对象,但事实并非如此。
  • 我不确定您在寻找什么,但看起来您可能会为此使用 array.filter:targetList = targetList.filter(function(target){ return target.target !== YourCondition; });

标签: javascript jquery arrays sorting


【解决方案1】:

在我看来,您的代码运行良好。我创建了一个 sn-p,在其中删除了额外的处理,以表明您已经完成了您的要求。

从数组中删除target.target 后,您是否有理由对其进行处理?您是否在其他地方引用了包含对象?

var targetList = [
  {
    "target": "t1",
    "datapoints": [
      [
        51.0,
        1483574400.0
      ],
      [
        54.0,
        1485561600.0
      ],
      [
        54.0,
        1485648000.0
      ]
    ]
  },
  {
    "target": "t2",
    "datapoints": [
      [
        56.0,
        1484265600.0
      ],
      [
        70.0,
        1484352000.0
      ],
      [
        71.0,
        1484438400.0
      ],
      [
        51.0,
        1484611200.0
      ]
    ]
  },
];

targetList.forEach(function(target, key) {
  if (target.target.includes("t2")) {
    targetList.splice(key, 1);
  }


});
  
console.log(targetList);

【讨论】:

  • 这应该是一条评论
  • @Alnitak 我不同意:我创建了一个可运行的 sn-p,它只包含相关部分,并证明提供的代码在被截断一点时可以按要求工作。
  • “找出不同之处”的答案也没有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多