从javascript对象获取字符串

时间:2019-01-10 14:54:26

标签: javascript

我有一个javascript对象。

{
    A: 1,
    B: 2,
    C: 2,
    D: 1,
    E: 1,
    F: 4,
    G: 6,
    H: 2
},

我想获取一个四个字母的字符串,具体取决于哪个键具有最高的值,但是只能按照以下16种组合按在对象中出现的顺序来构成该字符串:

A or B
C or D
E or F
G or H

因此,有16种可能的组合。上面的示例将导致字符串“ BCFG”

有任何想法吗?

4 个答案:

答案 0 :(得分:2)

您可以

  • 获取对象的条目
  • 配对两个条目
  • 映射刨丝器的字母
  • 将数组连接到单个字符串。

var object = { A: 1, B: 2, C: 2, D: 1, E: 1, F: 4, G: 6, H: 2 },
    result = Object
        .entries(object)
        .reduce((r, a, i) => {
            if (i % 2) {
               r[r.length - 1].push(a);
            } else {
                r.push([a]);
            }
            return r;
        }, [])
        .map(([a, b]) => a[1] > b[1] ? a[0] : b[0])
        .join('');

console.log(result);

答案 1 :(得分:1)

我比较对象中的每一对,然后从较高的一对构造结果字符串。

const obj = { A: 1, B: 2, C: 2, D: 1, E: 1, F: 4, G: 6, H: 2 } //"BCFG"

let getHighest = (obj) => {
  let result = "";
  // Convert the object into an array
  obj = Object.keys(obj).map(function(key) {
    return [key, obj[key]];
  });
  // Iterate through the array by i + 2 (skipping 1 in each loop)
  for (let i = 0, len = obj.length; i < len; i += 2){
    // The first one of each pair is more than the other one
    if (obj[i][1] > obj[i+1][1]){
      // Add the letter to the result
      result += obj[i][0];
    }
    // The second is greater or equal
    else {
      // Add the letter to the result
      result += obj[i+1][0];
    }
  }
  return result;
}

console.log(getHighest(obj));

答案 2 :(得分:0)

var values = {
    A: 1,
    B: 2,
    C: 2,
    D: 1,
    E: 1,
    F: 4,
    G: 6,
    H: 2
};

var result = Object.keys(values).reduce(function(result, value, index, array) {
  if (index % 2 === 0) {
    result.push(array[values[value] > values[array[index + 1]] ? index : index + 1])
  }
  return result;
}, []).join('');

答案 3 :(得分:0)

package i

import (
)

type A interface {
    GetB() B
    GetC() C
}

type B interface {
    UseC()
}

type C interface {
    UseB()
}

---------------------------------------------------
package a

import (
    "fmt"

    "basics/importCycleIssue/issueFix/b"
    "basics/importCycleIssue/issueFix/c"
    "basics/importCycleIssue/issueFix/i"
)

type A struct {
    B *b.B
    C *c.C
}

func NewA() *A {
    a := &A{}
    a.B = b.NewB(a)
    a.C = c.NewC(a)
    return a
}

// These methods implement i.A and return the i.B and i.C interface types
func (a A) GetB() i.B {
    return a.B
}

func (a A) GetC() i.C {
    return a.C
}

---------------------------------------------------
package b

import (
    "fmt"

    "basics/importCycleIssue/issueFix/i"
)

type B struct {
    a i.A
}

func NewB(a i.A) *B {
    b := &B{a: a}
    return b
}

func (b *B) UseC() {
    fmt.Println("need to use C:",b.a.GetC())
}

----------------------------------------------------
package c

import (
    "fmt"

    "basics/importCycleIssue/issueFix/i"
)

type C struct {
    a i.A
}

func NewC(a i.A) *C {
    c := &C{a: a}
    return c
}

func (c *C) UseB() {
    fmt.Println("need to use B:",c.a.GetB())
}

可能是您所要求的最简单的版本。创建可以用作索引的数组,然后以2个为一组。

您可以使用更多聪明的答案,但是它不能作为您的作业;)