【问题标题】:How to compare array values with object properties in this example?在此示例中如何将数组值与对象属性进行比较?
【发布时间】:2018-09-23 08:15:43
【问题描述】:

这是我的数组:

const ids = [
  "id1",
  "id2",
  "id3"
]

通过 cookie 提取的对象

const data = [
    {
      id: "id3" // dynamically populated and can vary, we need this property
      prop2: "prop2", // not needed
      prop3: "prop3" // not needed
    }
]

如何比较第一个数组值 - idsdata.id,如果是 true,则显示一些逻辑(例如 - console.log(true)?我需要它在 if statement 中。

注意data.id。可以是任何东西,从 id1id3。我需要找到一种方法来动态比较这些值。在“现实世界”中,它的 ID 来自 150000,但这只是示例的模型。

我也很欣赏 Lodash 的例子。

【问题讨论】:

  • 你的意思是ids[0] == data.id,不是吗?
  • 在这个例子中是的,但是 data.id 可以是任何东西 - 从id1id3 (在现实世界中它可以高达50000,这只是这个问题的例子) .另外,请不要投反对票,或者至少写下原因。
  • 我认为您被否决了,因为根据网站规则,您需要在问题中显示一些您试图解决问题的代码,而您没有这些代码。
  • 您的问题不清楚,您要检查data.id 是否匹配ids 的任何内容?
  • 就是拉扎尔,因为我不知道怎么比较if else..

标签: javascript jquery reactjs lodash


【解决方案1】:

您可以迭代 Array 中作为对象的所有元素,并使用Object.keys,迭代该对象中的所有键,这些键可以与初始值数组进行比较。

const ids = [
  "id1",
  "id2",
  "id3"
];

const data = [{
  id: "id3", // dynamically populated and can vary, we need this property
  prop2: "prop2", // not needed
  prop3: "prop3" // not needed
}];

const foundElems = [];
data.forEach((el) => {
  Object.keys(el).forEach(elem => {
    if (ids.indexOf(el[elem]) > -1) {
      var Obj = {};
      Obj[elem] = el[elem];
      foundElems.push(Obj);
    }
  });
});
console.log(foundElems);

【讨论】:

  • 您也可以使用 lodash。逻辑保持不变。 _.forEach 是您所需要的。
  • 好的,但我需要在if else 声明中进行。
【解决方案2】:

对于data中的每一项,你检查id是否在ids数组中,如果是,做一些事情

const ids = [
    "id1",
    "id2",
    "id3"
]

const data = [
  {
      id: "id3", // dynamically populated and can vary, we need this property
      prop2: "prop2", // not needed
      prop3: "prop3" // not needed
   }
]

// if we have the id in ids array, do something
if (data.some(d => ids.indexOf(d.id) > -1)) {
  // do something
}

使用 lodash:

const ids = [
    "id1",
    "id2",
    "id3"
]

const data = [
  {
      id: "id3", // dynamically populated and can vary, we need this property
      prop2: "prop2", // not needed
      prop3: "prop3" // not needed
   }
]

// if we have the id in ids array, do something
if (_.some(data, d => ids.indexOf(d.id) > -1)) {
  // do something
}

【讨论】:

    【解决方案3】:

    我想这就是你要找的:

    if (ids.indexOf(data.id) !== -1){
      console.log('true')
    }
    

    【讨论】:

    • 请再读一遍。
    【解决方案4】:

    只需运行下一段代码:

    <html>
    <body>
        <button onclick="compareIds()">Click me</button>
        <script>
            const ids = [
                  "id1",
                  "id2",
                  "id3"
                ]
    
            const data = [
                    {
                      id: "id3", // dynamically populated and can vary, we need this property
                      prop2: "prop2", // not needed
                      prop3: "prop3" // not needed
                    }
                ]
    
            function compareIds(){
                    var dataObject = findDataInObject();
                    for(var i = 0; i < ids.length; i++){
                            if (ids[i] == dataObject){
                                console.log("true");
                            }
    
                            else{
                                if(i == ids.length -1){
                                    console.log("false");
                                }
                        }
                    }
            }
    
            function findDataInObject(){
                        for(key in data) {
                            if(data.hasOwnProperty(key)) {
                                var ArrayOfData = data[key];
                                var IdOfData = ArrayOfData.id;
                                return IdOfData;
                            }
                        }
                    }
    
    
        </script>
    </body>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多