【问题标题】:Remove object elements where the element equal elements in array删除元素等于数组中元素的对象元素
【发布时间】:2020-10-21 13:34:53
【问题描述】:

我有这个对象

 var _identLayer = {                         
                          id: layerIndex,                                                  // Layer ID
                          label: opLayersMap.layerInfos[i].name,              // Layer Name
                          zoomscale: "2000",
                          forcescale: true
                      };

console.log(_identLayer);的结果

[Object { id: 1, label: "site1", zoomscale: "2000", forcescale: true }

对象 { id: 2, label: "site2", zoomscale: "2000", forcescale: true }

对象 { id: 3, label: "site3", zoomscale: "2000", forcescale: true }

对象 { id: 4, label: "site4", zoomscale: "2000", forcescale: true }

对象 { id: 5, label: "site5", zoomscale: "2000", forcescale: true }

对象 { id: 6, label: "site6", zoomscale: "2000", forcescale: true }

对象 { id: 7, label: "site7", zoomscale: "2000", forcescale: true }

对象 { id: 8, label: "site8", zoomscale: "2000", forcescale: true }

对象 { id: 9, label: "site9", zoomscale: "2000", forcescale: true }]

我也有这个数组

var tempArr=["site1","site3","site5","site7"]

现在我想要console.log(_identLayer); 中所有元素的结果 _identLayer 除了 _identLayer.label 等于 tempArr 数组的元素

我试过了,但它不起作用

var tempArr=["site1","site3","site5","site7"]

                      
                      for (var a = 0; a < tempArr.length; a++) {
                              if (_identLayer.label != tempArr[a]) {
                                  console.log("_identLayer")
                                  console.log(_identLayer);
                          } 
                      }

【问题讨论】:

  • 您只是在检查单个对象标签,您还需要遍历另一个数组! _identLayer 也是数组的对象吗?
  • _identLayer 是一个对象数组吗?
  • @RameshReddy 是的,它是一个对象数组

标签: javascript arrays for-loop object nested-loops


【解决方案1】:

您可以使用.filter() 排除结果数组中不需要的元素:

const data = [
  { id: 1, label: "site1", zoomscale: "2000", forcescale: true },
  { id: 2, label: "site2", zoomscale: "2000", forcescale: true },
  { id: 3, label: "site3", zoomscale: "2000", forcescale: true },
  { id: 4, label: "site4", zoomscale: "2000", forcescale: true },
  { id: 5, label: "site5", zoomscale: "2000", forcescale: true },
  { id: 6, label: "site6", zoomscale: "2000", forcescale: true },
  { id: 7, label: "site7", zoomscale: "2000", forcescale: true },
  { id: 8, label: "site8", zoomscale: "2000", forcescale: true },
  { id: 9, label: "site9", zoomscale: "2000", forcescale: true }
];

const filterBy = ["site1", "site3", "site5", "site7"];

const result = data.filter(({ label }) => !filterBy.includes(label));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • @HarmandeepSinghKalsi 我只是假设数据结构是一个数组。但是,如果不是,那么 OP 应该明确描述他正在使用的数据结构。让我们看看他是否更新了他的问题。
【解决方案2】:

您可以在这种情况下使用 .includes():

示例:

var tempArr=["site1","site3","site5","site7"]:

if (tempArr.includes(_identLayer.label) == false) {
    console.log(_identLayer);
}

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 2020-01-31
    • 2017-03-21
    • 2019-10-02
    • 2010-12-26
    • 2022-08-17
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多