从整数数组中创建对

时间:2019-09-16 18:11:15

标签: javascript arrays

我有这个功能,可以遍历某些对象属性。

它返回以下内容:

中央公园:0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1

杜松谷公园:2,0

高地公园:2,0,5,0

var parks = [
{
    name: 'Central Park',
    landmarks: [[0,1],[1,1],[2,1],[3,1],[4,1],[5,1],[6,1],[7,1]]
},
{
    name: 'Juniper Valley Park',
    landmarks: [2,0]
},
{
    name: 'Highland Park',
    landmarks: [[2,0],[5,0]]
},]
function showLandmarks() {
 for (var i = 0, len = parks.length; i < len; i++) {
    console.log(parks[i].name +': '+parks[i].landmarks);
 }
}
showLandmarks();

我想根据返回的数据创建对。预期结果是:

中央公园:[[0,1],[1,1],[2,1],[3,1],[4,1],[5,1],[6,1],[ 7,1]]

杜松谷公园:[2,0]

高地公园:[[2,0],[5,0]]

我在这里找到了几个主题,但只有部分信息。

6 个答案:

答案 0 :(得分:0)

您可以将reduce的原始数组var parks = [ { name: "Central Park", landmarks: [[0, 1], [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [7, 1]] }, { name: "Juniper Valley Park", landmarks: [2, 0] }, { name: "Highland Park", landmarks: [[2, 0], [5, 0]] } ]; const result = parks.reduce((acc, curr) => { acc[curr.name] = curr.landmarks; return acc; }, {}); console.log(result);替换为对象:

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        print(url.absoluteString)
        print("work")
        return true
    }

答案 1 :(得分:0)

与其在每个循环中将i增加一个,不如使用parks[i]parks[i+1]创建一个对,并将该对添加到累加器数组中,然后将i增加两个。

您只需要检查parks[i+1]是否存在。

答案 2 :(得分:0)

当您在两个对象之间使用+时,它会在内部调用toString并进行更改,而不是连接转换后的字符串

console.log([1,2]+[3,4])

您可以使用Object.fromEntries

var parks = [{ name: 'Central Park',landmarks: [[0,1],[1,1],[2,1],[3,1],[4,1],[5,1],[6,1],[7,1]]},{    name: 'Juniper Valley Park',landmarks: [2,0]},{ name: 'Highland Park',landmarks: [[2,0],[5,0]]},]

let obj = Object.fromEntries(parks.map(({
  name,
  landmarks
}) => [name, landmarks]))

console.log(obj)

答案 3 :(得分:0)

通过Juniper条目进行管理非常困难,因为它的格式不相同,但是下面的代码可以解决问题:

<template>
    <div class="container">
        <div class="row">
            <div class="col-md-6 mt-5 mx-auto">
                <form v-on:submit.prevent="login">
                    <h1 class="h3 mb-3 font-weight-normal">Please sign in</h1>
                    <div class="form-group">
                        <label for="email">Email Address</label>
                        <input type="email" v-model="email" class="form-control" name="email" placeholder="Enter Email">
                    </div>
                    <div class="form-group">
                        <label for="password">Password</label>
                        <input type="password" v-model="password" class="form-control" name="password" placeholder="Enter Password">
                    </div>
                    <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
                </form>
            </div>
        </div>
    </div>
</template>

<script>
import axios from 'axios'
import router from '../router'
import EventBus from './EventBus'

export default {
  data () {
    return {
      email: '',
      password: ''
    }
  },

  methods: {
    login () {
      axios.post('users/login', {
        email: this.email,
        password: this.password
      }).then(res => {
        localStorage.setItem('usertoken', res.data)
        this.email = ''
        this.password = ''
        router.push({ name: 'Profile' })
      }).catch(err => {
        console.log(err)
      })
      this.emitMethod()
    },
    emitMethod () {
      EventBus.$emit('logged-in', 'loggedin')
    }
  }
}
</script>

答案 4 :(得分:0)

这里不需要使用循环,可以在Array上使用forEach,而不必担心i索引。当然,这假设您始终需要完整的数组。

我怀疑您实际上是希望在坐标周围打印[]。 如果是这样,您可以使用map将它们添加到每个坐标集中。

我要说的是,即使瞻博谷公园只有一个条目,该条目仍应位于数组中,以保持数据的一致性。

{
    name: "Juniper Valley Park",
    landmarks: [[2, 0]]
  },

这意味着我们将不需要任何特殊逻辑来处理只有一个坐标的情况。

var parks = [
{
    name: 'Central Park',
    landmarks: [[0,1],[1,1],[2,1],[3,1],[4,1],[5,1],[6,1],[7,1]]
},
{
    name: 'Juniper Valley Park',
    landmarks: [[2,0]]
},
{
    name: 'Highland Park',
    landmarks: [[2,0],[5,0]]
},]
function showLandmarks() {
 parks.forEach(park => 
    console.log(park.name +': ['+ park.landmarks.map(landmark => '[' + landmark +']') + ']'));
 }
showLandmarks();

输出: 中央公园:[0,1],[1,1],[2,1],[3,1],[4,1],[5,1],[6,1],[7,1] ]

杜松谷公园:[[2,0]]

高地公园:[[2,0],[5,0]]

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

答案 5 :(得分:0)

如果不需要返回字符串而不是数组数组,则删除JSON.stringify。

const landmarks = (...points) => {
  const result = [];
  while (points.length) {
    result.push(points.splice(0, 2));
  }
  return JSON.stringify(result);
};

// test
// Central Park:
console.log(landmarks(0, 1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1));
// Juniper Valley Park:
console.log(landmarks(2, 0));
// Highland Park:
console.log(landmarks(2, 0, 5, 0));