javascript - 包含对象数组和字符串数组的对象

标签 javascript jquery arrays

我有一个看起来像这样的对象:

var obj = {
  "array1": [
    {"label": "something1", "ref": "option2a"},
    {"label": "something2", "ref": "option2b"},
    {"label": "something3", "ref": "option2a"},
    {"label": "something4", "ref": "option2a"},
    {"label": "something5 is the longest", "ref": "option2a"}
  ],
  array2: [
    "arrayItem1",
    "array Item 2"
  ]
}

该对象包含对象数组和字符串数组。我想遍历每个具有标签的对象并返回最长的标签。在前面的示例中,预期输出 id:

“something5 是最长的”。

我尝试过以下方法:

function getLongest(object, key) {
  return Object.values(object).reduce((l, v) => {
    if (object.hasOwnProperty(key)) {
      if (key in v)
        return Math.max(l, v[key].length);
      if (v && typeof v === 'object')
        return Math.max(l, getLongest(v, key));
      return l;
    }
  }, 0);
}

但是,这给了我一个错误,因为它找不到 array2 中项目的属性 label

最佳答案

这里有一种方法,它在 Object.Values() 上使用 anidated reduce() 方法:

var obj = {
    "array1": [
        {"label": "something1", "ref": "option2a"},
        {"label": "something2", "ref": "option2b"},
        {"label": "something3", "ref": "option2ahgf"},
        {"label": "something4", "ref": "option2a"},
        {"label": "I'm not the longest", "ref": "option2a"}
    ],
    array2: [
        "arrayItem1",
        {"label": "something5 is the longest", "ref": "option2a"},
        "array Item 2"
    ],
    array3: [
        {"label": "somethingX", "ref": "option2X"},
        {"label": "somethingY", "ref": "option2Y"}
    ]
}

const getLongest = (obj, key) =>
{
    let r = Object.values(obj).reduce((res, curr) =>
    {
        if (!Array.isArray(curr))
            return res;

        let newMax = curr.reduce(
            (r, c) => c[[key]] && (c[[key]].length > r.length) ? c[[key]] : r,
            ""
        );

        res = newMax.length > res.length ? newMax : res;
        return res;

    }, "");

    return r;
}

console.log(getLongest(obj, "label"));
console.log(getLongest(obj, "ref"));

关于javascript - 包含对象数组和字符串数组的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54152210/

相关文章:

javascript - Ember 数据 find() 方法返回数组,但我需要一条记录

javascript - JQuery:ajax调用完成后如何回调每个循环?

jQuery UI 可拖动限制(像素)

arrays - Swift - 创建圆并添加到数组中

java - 在Java中将文本文件读入char数组

javascript - 有没有办法让 javascript 不计算特定字符?

javascript - 使用 JavaScript 附加 HTML

javascript - 自动加载为淡入淡出弹出窗口

javascript - 根据窗口大小增加属性的负值

ios - 使用 SWIFT 在 PARSE 上保存日期数据和结果的最佳方法