最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

javascript - CoffeeScript: Initialize or increment value in array - Stack Overflow

matteradmin3PV0评论

My application has different types of data about a fixed set of countries, kept in arrays of a consistent order.

data = 
  oranges: [1,2,3]
  apples: [1,2,3]
  cabbages: [1,2,3]

These arrays get bined by various criteria into new arrays, and I find myself wanting to write code like this:

fruit = []
for key, arr of data                  # For each array
  if key in ['oranges', 'apples']     # It it meets certain criteria
    for val, i in arr                 # Use the values in the creation of a new array
      fruit[i] += val

This doesn't work because if fruit[i] is not initialized += won't work.

There are various ways around this.

1) Fill the new fruit array with zeros first:

for i in [0..len]
  fruit[i] = 0

2) Check if fruit[i] exists:

if fruit[i]?
  fruit[i] += val 
else 
  fruit[i] = val

Neither of these seem elegant. I tried extracting approach 2) into a function but I have to admit that I couldn't quite get my head round it. I thought about passing in fruit, cloning it (with arr.slice(0)) and then setting fruit to the output, but it didn't feel right to do this on every iteration.

The data format is fixed, but other than that my question is "what is the best way of handling this?" I'm open to answers that use CoffeeScript and/or ECMAScript 5 and/or JQuery.

My application has different types of data about a fixed set of countries, kept in arrays of a consistent order.

data = 
  oranges: [1,2,3]
  apples: [1,2,3]
  cabbages: [1,2,3]

These arrays get bined by various criteria into new arrays, and I find myself wanting to write code like this:

fruit = []
for key, arr of data                  # For each array
  if key in ['oranges', 'apples']     # It it meets certain criteria
    for val, i in arr                 # Use the values in the creation of a new array
      fruit[i] += val

This doesn't work because if fruit[i] is not initialized += won't work.

There are various ways around this.

1) Fill the new fruit array with zeros first:

for i in [0..len]
  fruit[i] = 0

2) Check if fruit[i] exists:

if fruit[i]?
  fruit[i] += val 
else 
  fruit[i] = val

Neither of these seem elegant. I tried extracting approach 2) into a function but I have to admit that I couldn't quite get my head round it. I thought about passing in fruit, cloning it (with arr.slice(0)) and then setting fruit to the output, but it didn't feel right to do this on every iteration.

The data format is fixed, but other than that my question is "what is the best way of handling this?" I'm open to answers that use CoffeeScript and/or ECMAScript 5 and/or JQuery.

Share Improve this question edited Aug 22, 2013 at 8:09 Derek Hill asked Aug 22, 2013 at 7:40 Derek HillDerek Hill 6,4745 gold badges58 silver badges79 bronze badges 3
  • Where is array defined? – elclanrs Commented Aug 22, 2013 at 7:44
  • @elclanrs sorry. Fixed typo. array is arr – Derek Hill Commented Aug 22, 2013 at 8:10
  • 2 fruit[i] = fruit[i] + 1 || 1? – david Commented Aug 22, 2013 at 8:15
Add a ment  | 

1 Answer 1

Reset to default 6

You can initialize element of the array with using ||= or ?= operator:

fruit[i] ||= 0
fruit[i] += val

The only difference is that ?= checks for null or undefined and ||= checks for any false value.

Post a comment

comment list (0)

  1. No comments so far