¿Cuál es la forma correcta de concatenar una cadena?

var d=getEntity( {"Division": 
{
"oddTerms": 
    [           
        {
              "entity": "Sunshine",
              "Sunshine": [
                    {
                         "count": 2,
                        "entity": "Dodge"
                    },
                    {
                        "count": 1,
                        "entity": "Dodge Avenger"
                    },

              ]
        }
  ]

}});

Quiero atravesar la cadena json y los nombres de entidad Dodge y Dodge Avenger. He usado el siguiente método

for (var k in h.Division.oddTerms)
{
s=h.Division.oddTerms[k].entity;
h.Division.oddTerms[k].+s+.entity;
}

Pero creo que este no es el método correcto para concatenar, ya que no funciona ... ¿alguien sabe el formato correcto?

preguntado el 03 de mayo de 12 a las 14:05

¿Qué esperas que haga la última línea de tu bucle? -

Lo alertaría, por ejemplo... pero debería obtener el valor de la entidad Dodge y Dodge avenger alertado... -

s tendrá el valor sol de la penúltima línea y en la última línea, debe agregar el valor sol y obtener los nombres de las entidades. Estoy intentando esto porque si la cadena contiene más de un elemento, tendrá más valores que jst sunshine .. -

Bueno. Entonces, con el JSON específico anterior, ¿qué valores desea mostrar? Por ejemplo: "Sunshine: Dodge, Dodge Avenger" o tal vez "Sunshine: Dodge","Sunshine: Dodge Avenger"... -

{Sunshine:[Dodge, Dodge Avenger]} Esta es la forma en que quiero que se muestre mi salida... -

2 Respuestas

oddTerms es una matriz, no un objeto. Para matrices en JavaScript, debe usar un bucle for con un contador en lugar de iterar a través de los elementos:

var concatedString = '';
for (var k=0; k<h.Division.oddTerms.length;k++)
{
    // Get the name of the entity we want to collect the entity terms of
    var entityName =h.Division.oddTerms[k].entity;
    // iterate through all the instances of each entity
    for(var j=0; j<h.Division.oddTerms[k][entityName].length;j++){
      concatedString += h.Division.oddTerms[k][entityName][j].entity;
    }
}

contestado el 03 de mayo de 12 a las 15:05

Ese no es el problema, ya que (var k en h.Division.oddTerms) funcionará como el ciclo foreach en php, el problema es la forma en que agrego esa variable s con el valor Sunshine en 'h.Division.oddTerms[ k].+s+.entidad;' - user1371896

var entityName = "",
    arrTerms = [],
    outputTemplate = '{"%entityName":[%terms]}',
    h = {
        "Division":
        {
            "oddTerms":
            [
                {
                    "entity": "Sunshine",
                    "Sunshine": [
                    {
                        "count": 2,
                        "entity": "Dodge"
                    },
                    {
                        "count": 1,
                        "entity": "Dodge Avenger"
                    },

                    ]
                }
            ]

        }
    };

for (var i = 0; i <  h.Division.oddTerms.length; i++)
{
    entityName=h.Division.oddTerms[i].entity; // "Sunshine"
    terms = h.Division.oddTerms[i][entityName];

    for (var j = 0; j < terms.length; j++) {
        arrTerms.push('"' + terms[j].entity + '"');
    }
}

// This will give you '{"Sunshine":["Dodge","Dodge Avenger"]}':
console.log(outputTemplate.replace('%entityName', entityName).replace('%terms', arrTerms.join(",")));

Edit:

Sólo un poco más sobre esto.

JSON puede ser un poco confuso para trabajar si no está acostumbrado a trabajar con JS y objetos y matrices "literales". En JS, puede definir objetos y matrices de varias maneras, pero la más fácil (y la preferida por muchos desarrolladores) es con estos literales.

He aquí un ejemplo de un objeto:

var myObj = {
    "some prop":"some value",
    "anotherProp":"another value"
}

Puedes buscar los miembros de myObj de varias maneras:

myObj.anotherProp // "otro valor"

myObj["some prop"] // tiene que usar este formulario si el nombre de la propiedad tiene un espacio en él

Para recorrer el contenido de una matriz, use la segunda forma. Por ejemplo, esto no funcionará:

for (var strPropName in myObj) {
   console.log(myObj.strPropName); // This won't work!
}

En su lugar, debe recorrer las propiedades de esta manera:

for (var strPropName in myObj) {
    if (myObj.hasOwnProperty(strPropName)) {
       console.log(myObj[strPropName]);
    }
}

El sistema if block es opcional, pero evitará problemas potenciales si siempre incluye esto en su código. También es requerido por algunos validadores.

Ahora, aquí hay un ejemplo de una matriz:

var myArray = ["some value", "anotherValue"];

Se accede a estos con un índice numérico:

myArray[0] // "some value"
myArray[1] // "anotherValue"
myArray[2] // undefined

Y puedes recorrerlos:

for (var index = 0; index < myArray.length; index++) {
    console.log(myArray[index]);
}

Puede anidar objetos dentro de matrices:

myArray = [{},{},{}];

Y puedes anidar arreglos dentro de objetos:

myObject = {"arr1":[], "arr2":[], "arr3":[]}

contestado el 04 de mayo de 12 a las 02:05

Agregaré algunos más aquí para ayudarlo. - Andrés

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.